All Downloads are FREE. Search and download functionalities are using the official Maven repository.

theme.keycloak.v2.admin.resources.assets.ResourcesPolicySelect-c5431a86.js.map Maven / Gradle / Ivy

There is a newer version: 25.0.1
Show newest version
{"version":3,"file":"ResourcesPolicySelect-c5431a86.js","sources":["../../src/clients/authorization/ResourcesPolicySelect.tsx"],"sourcesContent":["import type PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport type ResourceRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceRepresentation\";\nimport type {\n  Clients,\n  PolicyQuery,\n} from \"@keycloak/keycloak-admin-client/lib/resources/clients\";\nimport { Select, SelectOption, SelectVariant } from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { adminClient } from \"../../admin-client\";\nimport { useFetch } from \"../../utils/useFetch\";\n\ntype Type = \"resources\" | \"policies\";\n\ntype ResourcesPolicySelectProps = {\n  name: Type;\n  clientId: string;\n  permissionId?: string;\n  variant?: SelectVariant;\n  preSelected?: string;\n  isRequired?: boolean;\n};\n\ntype Policies = {\n  id?: string;\n  name?: string;\n};\n\ntype TypeMapping = {\n  [key in Type]: {\n    searchFunction: keyof Pick;\n    fetchFunction: keyof Pick<\n      Clients,\n      \"getAssociatedPolicies\" | \"getAssociatedResources\"\n    >;\n  };\n};\n\nconst typeMapping: TypeMapping = {\n  resources: {\n    searchFunction: \"listResources\",\n    fetchFunction: \"getAssociatedResources\",\n  },\n  policies: {\n    searchFunction: \"listPolicies\",\n    fetchFunction: \"getAssociatedPolicies\",\n  },\n};\n\nexport const ResourcesPolicySelect = ({\n  name,\n  clientId,\n  permissionId,\n  variant = SelectVariant.typeaheadMulti,\n  preSelected,\n  isRequired = false,\n}: ResourcesPolicySelectProps) => {\n  const { t } = useTranslation(\"clients\");\n\n  const {\n    control,\n    formState: { errors },\n  } = useFormContext();\n  const [items, setItems] = useState([]);\n  const [search, setSearch] = useState(\"\");\n  const [open, setOpen] = useState(false);\n\n  const functions = typeMapping[name];\n\n  const convert = (\n    p: PolicyRepresentation | ResourceRepresentation,\n  ): Policies => ({\n    id: \"_id\" in p ? p._id : \"id\" in p ? p.id : undefined,\n    name: p.name,\n  });\n\n  useFetch(\n    async () => {\n      const params: PolicyQuery = Object.assign(\n        { id: clientId, first: 0, max: 10, permission: \"false\" },\n        search === \"\" ? null : { name: search },\n      );\n      return (\n        await Promise.all([\n          adminClient.clients[functions.searchFunction](params),\n          permissionId\n            ? adminClient.clients[functions.fetchFunction]({\n                id: clientId,\n                permissionId,\n              })\n            : Promise.resolve([]),\n        ])\n      )\n        .flat()\n        .filter(\n          (r): r is PolicyRepresentation | ResourceRepresentation =>\n            typeof r !== \"string\",\n        )\n        .map(convert)\n        .filter(\n          ({ id }, index, self) =>\n            index === self.findIndex(({ id: otherId }) => id === otherId),\n        );\n    },\n    setItems,\n    [search],\n  );\n\n  const toSelectOptions = () =>\n    items.map((p) => (\n      \n        {p.name}\n      \n    ));\n\n  return (\n     !isRequired || value!.length > 0 }}\n      render={({ field }) => (\n         {\n            setSearch(filter);\n            return toSelectOptions();\n          }}\n          onClear={() => {\n            field.onChange([]);\n            setSearch(\"\");\n          }}\n          selections={field.value}\n          onSelect={(_, selectedValue) => {\n            const option = selectedValue.toString();\n            if (variant === SelectVariant.typeaheadMulti) {\n              const changedValue = field.value?.find(\n                (p: string) => p === option,\n              )\n                ? field.value.filter((p: string) => p !== option)\n                : [...field.value!, option];\n              field.onChange(changedValue);\n            } else {\n              field.onChange([option]);\n            }\n\n            setSearch(\"\");\n          }}\n          isOpen={open}\n          aria-labelledby={t(name)}\n          isDisabled={!!preSelected}\n          validated={errors[name] ? \"error\" : \"default\"}\n          typeAheadAriaLabel={t(name)}\n        >\n          {toSelectOptions()}\n        \n      )}\n    />\n  );\n};\n"],"names":["typeMapping","ResourcesPolicySelect","name","clientId","permissionId","variant","SelectVariant","preSelected","isRequired","t","useTranslation","control","errors","useFormContext","items","setItems","useState","search","setSearch","open","setOpen","functions","convert","p","useFetch","params","adminClient","r","id","index","self","otherId","toSelectOptions","jsx","SelectOption","Controller","value","field","Select","_","filter","selectedValue","option","changedValue"],"mappings":"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"}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy