{"version":3,"file":"AttributeMappingTable.mjs","sources":["../../../../../../../../web/src/adminPortal/sso/AttributeMappingTable.tsx"],"sourcesContent":["import { Add } from '@mui/icons-material';\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { Button } from '../components/Button';\nimport { FlexBox } from '../components/FlexBox';\nimport { Input } from '../components/Input';\nimport { ListEditor } from '../components/ListEditor';\nimport { Modal, useModalState } from '../components/Modal';\nimport { Select } from '../components/Select';\nimport { Typography } from '../components/Typography';\nimport { TableItemRenderer } from '../shared/components/types';\nimport { collator } from '../utils/collator';\nimport { StateProps } from '../utils/useFormState';\n\nexport const nameKeys = new Set(['full_name', 'first_name', 'last_name']);\nexport const requiredKeys = new Set([...nameKeys, 'email']);\n\nexport interface AttributeMappingState {\n  attributeMapping: Record<string, string>;\n}\n\nexport interface AttributeMappingTableProps<TState> extends StateProps<TState> {\n  editing: boolean;\n}\n\ntype AttributeMapping = {\n  key: string;\n  value: string;\n};\n\nexport const attributeMappingItemRenderer: TableItemRenderer<AttributeMapping>[] = [\n  {\n    title: 'Key',\n    getValue: ({ key }) => {\n      const isRequiredKey = requiredKeys.has(key);\n      const label = key;\n      return (\n        <Typography variant=\"body2\">\n          {label}\n          {isRequiredKey && (\n            <>\n              {' '}\n              <Typography component=\"span\" color=\"error\">\n                *\n              </Typography>\n            </>\n          )}\n        </Typography>\n      );\n    },\n  },\n  { title: 'Value', getValue: ({ value }) => <Typography variant=\"body2\">{value}</Typography> },\n];\n\nexport const attributeMappingKeyExtractor = ({ key }: { key: string; value: string }): string => key;\n\nexport const AttributeMappingTable = <TState extends AttributeMappingState>({\n  editing,\n  localState,\n  remoteState,\n  setLocalState,\n}: AttributeMappingTableProps<TState>) => {\n  const { attributeMapping } = editing ? localState : remoteState;\n\n  const attributeMappingItems = useMemo(\n    () =>\n      Object.entries(attributeMapping)\n        .map(([key, value]) => ({ key, value }))\n        .sort((a, b) => collator.compare(a.key, b.key)),\n    [attributeMapping],\n  );\n\n  const [pendingAttributeMapping, setPendingAttributeMapping] = useState<[key: string, value: string][]>([['', '']]);\n\n  const [editMode, setEditMode] = useState<'key' | 'name'>('key');\n  const [editedAttributeMappingKey, setEditedAttributeMappingKey] = useState('');\n  const [editedAttributeMappingValue, setEditedAttributeMappingValue] = useState('');\n  const [editedAttributeMappingLastNameValue, setEditedAttributeMappingLastNameValue] = useState('');\n\n  const editAttributeMappingModalProps = useModalState(() => {\n    const editedMapping: Record<string, string> =\n      editMode === 'name' && editedAttributeMappingKey === 'first_name'\n        ? {\n            first_name: editedAttributeMappingValue,\n            last_name: editedAttributeMappingLastNameValue,\n          }\n        : {\n            [editedAttributeMappingKey]: editedAttributeMappingValue,\n          };\n\n    setLocalState((state) => {\n      const mergedMapping = {\n        ...state.attributeMapping,\n        ...editedMapping,\n      };\n\n      if (editMode === 'name') {\n        if (editedAttributeMappingKey === 'full_name') {\n          delete mergedMapping.first_name;\n          delete mergedMapping.last_name;\n        }\n        if (editedAttributeMappingKey === 'first_name') {\n          delete mergedMapping.full_name;\n        }\n      }\n      return {\n        ...state,\n        attributeMapping: mergedMapping,\n      };\n    });\n  });\n\n  const hasFirstAndLastNameKeys = !!(attributeMapping.first_name && attributeMapping.last_name);\n  const hasFullNameKey = !!attributeMapping.full_name;\n\n  const handleEditAttributeMapping = useCallback(\n    (key: string) => {\n      if (\n        (key === 'full_name' && !attributeMapping.first_name && !attributeMapping.last_name) ||\n        ((key === 'first_name' || key === 'last_name') && !hasFullNameKey)\n      ) {\n        setEditMode('name');\n\n        const effectiveKey = key === 'full_name' ? 'full_name' : 'first_name';\n\n        setEditedAttributeMappingKey(effectiveKey);\n        setEditedAttributeMappingValue(attributeMapping[effectiveKey] ?? '');\n        setEditedAttributeMappingLastNameValue(attributeMapping.last_name ?? '');\n      } else {\n        setEditMode('key');\n        setEditedAttributeMappingKey(key);\n        setEditedAttributeMappingValue(attributeMapping[key] ?? '');\n      }\n\n      editAttributeMappingModalProps.open();\n    },\n    [attributeMapping, editAttributeMappingModalProps, hasFullNameKey],\n  );\n\n  const deleteAttributeMapping = useCallback(\n    (key: string) => {\n      setLocalState((state) => {\n        const { [key]: _, ...rest } = state.attributeMapping;\n        return {\n          ...state,\n          attributeMapping: rest,\n        };\n      });\n    },\n    [setLocalState],\n  );\n\n  const deleteAttributeMappingModalProps = useModalState(() => {\n    if (pendingDeleteAttributeMappingKey) {\n      deleteAttributeMapping(pendingDeleteAttributeMappingKey);\n    }\n  });\n  const [pendingDeleteAttributeMappingKey, setPendingDeleteAttributeMappingKey] = useState<string>();\n  const handleRequestDeleteAttributeMapping = useCallback(\n    (key: string) => {\n      if (key !== 'groups') {\n        deleteAttributeMapping(key);\n      } else {\n        setPendingDeleteAttributeMappingKey(key);\n        deleteAttributeMappingModalProps.open();\n      }\n    },\n    [deleteAttributeMapping, deleteAttributeMappingModalProps],\n  );\n\n  return (\n    <>\n      <Modal {...editAttributeMappingModalProps} title=\"Edit custom mapping\" confirmButtonText=\"Save\">\n        <FlexBox flexDirection=\"column\" gap={1}>\n          {editMode === 'name' ? (\n            <Select\n              selectItems={[\n                { label: 'Full Name', value: 'full_name' },\n                { label: 'First Name, Last Name', value: 'first_last_name' },\n              ]}\n              fullWidth\n              caption=\"You can change the format of the key.\"\n              value={editedAttributeMappingKey === 'full_name' ? 'full_name' : 'first_last_name'}\n              onChange={(value) => {\n                setEditedAttributeMappingKey(value === 'full_name' ? 'full_name' : 'first_name');\n              }}\n            />\n          ) : (\n            <Input label=\"Key\" fullWidth value={editedAttributeMappingKey} onChange={setEditedAttributeMappingKey} />\n          )}\n          {editMode === 'name' &&\n          (editedAttributeMappingKey === 'first_name' || editedAttributeMappingKey === 'last_name') ? (\n            <>\n              <FlexBox gap={2}>\n                <Input\n                  label=\"First Name\"\n                  fullWidth\n                  value={editedAttributeMappingValue}\n                  onChange={setEditedAttributeMappingValue}\n                />\n                <Input\n                  label=\"Last Name\"\n                  fullWidth\n                  value={editedAttributeMappingLastNameValue}\n                  onChange={setEditedAttributeMappingLastNameValue}\n                />\n              </FlexBox>\n            </>\n          ) : (\n            <Input\n              label=\"Value\"\n              fullWidth\n              value={editedAttributeMappingValue}\n              onChange={setEditedAttributeMappingValue}\n            />\n          )}\n        </FlexBox>\n      </Modal>\n      <Modal {...deleteAttributeMappingModalProps} title=\"Delete mapping?\" confirmButtonText=\"Delete\" warning>\n        <Typography>\n          Deleting the Groups attribute mapping will also disable any Group Role assignments you have added above. They\n          will not be deleted, but you must add a Groups mapping to make edits.\n        </Typography>\n      </Modal>\n      <ListEditor\n        items={attributeMappingItems}\n        itemRenderer={attributeMappingItemRenderer}\n        rowKeyExtractor={attributeMappingKeyExtractor}\n        addModalProps={{\n          confirm: () => {\n            setLocalState((state) => {\n              return {\n                ...state,\n                attributeMapping: {\n                  ...state.attributeMapping,\n                  ...Object.fromEntries(\n                    pendingAttributeMapping.filter(([key, value]) => key && value && !state.attributeMapping[key]),\n                  ),\n                },\n              };\n            });\n\n            return Promise.resolve();\n          },\n          title: 'Add custom mapping',\n          content: (\n            <FlexBox flexDirection=\"column\" gap={1}>\n              {pendingAttributeMapping.map(([key, value], i) => (\n                <FlexBox gap={1} key={i}>\n                  <Input\n                    label=\"Key\"\n                    fullWidth\n                    value={key}\n                    onChange={(value) => {\n                      setPendingAttributeMapping((state) =>\n                        state.map((item, index) => (index === i ? [value, item[1]] : item)),\n                      );\n                    }}\n                  />\n                  <Input\n                    label=\"Value\"\n                    fullWidth\n                    value={value}\n                    onChange={(value) => {\n                      setPendingAttributeMapping((state) =>\n                        state.map((item, index) => (index === i ? [item[0], value] : item)),\n                      );\n                    }}\n                  />\n                </FlexBox>\n              ))}\n              <Button\n                variant=\"text\"\n                startIcon={<Add />}\n                fullWidth\n                onClick={() => {\n                  setPendingAttributeMapping((state) => [...state, ['', '']]);\n                }}\n              >\n                Add custom mapping\n              </Button>\n            </FlexBox>\n          ),\n        }}\n        hideAddButton={!editing}\n        getItemActionProps={\n          editing\n            ? (item) => ({\n                action:\n                  // Only allow editing email if its value is not expected\n                  item.key === 'email' && item.value === 'NameID'\n                    ? undefined\n                    : {\n                        text: 'Edit',\n                        onClick: () => {\n                          handleEditAttributeMapping(item.key);\n                        },\n                      },\n                warningAction:\n                  // Never allow deleting email; allow deleting name-related fields only if they are superfluous\n                  item.key === 'email' || (nameKeys.has(item.key) && !(hasFirstAndLastNameKeys && hasFullNameKey))\n                    ? undefined\n                    : {\n                        text: 'Delete',\n                        onClick: () => {\n                          handleRequestDeleteAttributeMapping(item.key);\n                        },\n                      },\n              })\n            : undefined\n        }\n      />\n    </>\n  );\n};\n"],"names":["nameKeys","Set","requiredKeys","attributeMappingItemRenderer","title","getValue","key","isRequiredKey","has","label","React","Typography","variant","component","color","value","attributeMappingKeyExtractor","AttributeMappingTable","editing","localState","remoteState","setLocalState","attributeMapping","attributeMappingItems","useMemo","Object","entries","map","sort","a","b","collator","compare","pendingAttributeMapping","setPendingAttributeMapping","useState","editMode","setEditMode","editedAttributeMappingKey","setEditedAttributeMappingKey","editedAttributeMappingValue","setEditedAttributeMappingValue","editedAttributeMappingLastNameValue","setEditedAttributeMappingLastNameValue","editAttributeMappingModalProps","useModalState","editedMapping","first_name","last_name","state","mergedMapping","full_name","hasFirstAndLastNameKeys","hasFullNameKey","handleEditAttributeMapping","useCallback","effectiveKey","open","deleteAttributeMapping","_","rest","deleteAttributeMappingModalProps","pendingDeleteAttributeMappingKey","setPendingDeleteAttributeMappingKey","handleRequestDeleteAttributeMapping","Modal","confirmButtonText","FlexBox","flexDirection","gap","Select","selectItems","fullWidth","caption","onChange","Input","warning","ListEditor","items","itemRenderer","rowKeyExtractor","addModalProps","confirm","fromEntries","filter","Promise","resolve","content","i","item","index","Button","startIcon","Add","onClick","hideAddButton","getItemActionProps","action","undefined","text","warningAction"],"mappings":"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"}