Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import { APIOrg, APIProfile } from "../authentication"; import { USER_TYPE } from "../../utils"; // @ts-ignore import { getParams } from "url-matcher"; export function getContainerIdFromUrl(sourceUrl?: string) { // /orgs/FOO/sources/FOO/ => FOO // /orgs/FOO/collections/FOO/ => FOO // / => All Public Concepts if (!sourceUrl) return undefined; const withoutTrailingSlash = sourceUrl.endsWith("/") ? sourceUrl.substring(0, sourceUrl.lastIndexOf("/")) : sourceUrl; const sourceName = withoutTrailingSlash.substring( withoutTrailingSlash.lastIndexOf("/") + 1 ); return sourceName ? sourceName : "All Public Concepts"; } export function canModifyConcept( conceptUrl: string, profile?: APIProfile, usersOrgs: APIOrg[] = [] ) { const CONCEPT_PATTERN = "/:ownerType/:owner/(collections/:collectionId)(sources/:sourceId)/concepts/:conceptId/"; const matches = getParams(CONCEPT_PATTERN, conceptUrl); if (!matches) return false; if (matches.ownerType === USER_TYPE) return profile?.username === matches.owner; else return usersOrgs.map(org => org.id).includes(matches.owner); } |