@archbase/security-ui 4.0.46 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/archbase-security-ui-4.1.0.tgz +0 -0
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1719 -1318
- package/dist/index.js.map +1 -1
- package/package.json +11 -11
- package/dist/archbase-security-ui-4.0.46.tgz +0 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/.pnpm/react@19.2.3/node_modules/react/jsx-runtime.js","../src/ProfileModal.tsx","../src/ArchbaseDualListSelector.tsx","../src/RenderProfileUserItem.tsx","../src/UserModal.tsx","../src/GroupModal.tsx","../src/ApiTokenModal.tsx","../src/PermissionsSelectorModal.tsx","../src/ArchbaseSecurityView.tsx","../src/ArchbaseApiTokenView.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * ProfileModal — modal com dados da conta do usuário.\n * @status stable\n */\nimport React from 'react'\nimport { Grid, ScrollArea, Stack, Modal, Button, Group } from '@mantine/core'\nimport { IArchbaseDataSourceBase } from '@archbase/data'\nimport { getI18nextInstance } from '@archbase/core';\nimport { ProfileDto } from '@archbase/security'\nimport { ArchbaseEdit } from '@archbase/components'\n\nexport interface ProfileModalOptions {\n customContentBefore?: (profile: ProfileDto) => React.ReactNode;\n customContentAfter?: (profile: ProfileDto) => React.ReactNode;\n}\n\nexport interface ProfileModalProps {\n dataSource: IArchbaseDataSourceBase<ProfileDto>\n opened: boolean\n onClickOk: (record?: ProfileDto, result?: any) => void\n onClickCancel: (record?: ProfileDto) => void\n onCustomSave?: (record?: ProfileDto, callback?: Function) => void\n onAfterSave?: (record?: ProfileDto) => void\n options?: ProfileModalOptions\n}\n\nexport const ProfileModal = (props: ProfileModalProps) => {\n const options = {...(props.options ?? {}) }\n \n const handleSave = () => {\n if (props.onCustomSave) {\n props.onCustomSave(props.dataSource.getCurrentRecord()!, (success: boolean) => {\n if (success && props.onAfterSave) {\n props.onAfterSave(props.dataSource.getCurrentRecord()!);\n }\n props.onClickOk(props.dataSource.getCurrentRecord()!, success);\n });\n } else {\n props.onClickOk(props.dataSource.getCurrentRecord()!, true);\n }\n };\n\n const handleCancel = () => {\n props.onClickCancel(props.dataSource.getCurrentRecord()!);\n };\n \n return (\n <Modal\n opened={props.opened}\n onClose={handleCancel}\n title={getI18nextInstance().t('archbase:Perfil')}\n size=\"60%\"\n styles={{content: {maxWidth: 1000}}}\n >\n <ScrollArea style={{ height: '460px' }}>\n <Stack w={\"98%\"}>\n {options?.customContentBefore && options.customContentBefore(props.dataSource.getCurrentRecord()!)}\n <Grid>\n <Grid.Col span={{ base: 12, md: 12, lg: 12 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Nome do perfil')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe o nome do perfil')}`}\n dataSource={props.dataSource}\n dataField=\"name\"\n />\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 12, lg: 12 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Descrição do perfil')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe a descrição do perfil')}`}\n dataSource={props.dataSource}\n dataField=\"description\"\n />\n </Grid.Col>\n </Grid>\n {options?.customContentAfter && options.customContentAfter(props.dataSource.getCurrentRecord()!)}\n \n <Group justify=\"flex-end\" mt=\"md\">\n <Button variant=\"default\" onClick={handleCancel}>\n {getI18nextInstance().t('archbase:Cancelar')}\n </Button>\n <Button onClick={handleSave}>\n {getI18nextInstance().t('archbase:Salvar')}\n </Button>\n </Group>\n </Stack>\n </ScrollArea>\n </Modal>\n )\n}\n","/**\n * ArchbaseDualListSelector — duplo painel para mover itens entre permissões/roles.\n * @status stable\n */\nimport React, { useState, useEffect, useCallback } from 'react'\nimport {\n Button,\n Group,\n Box,\n Text,\n List,\n Checkbox,\n Stack,\n ActionIcon,\n ScrollArea,\n Paper,\n Tooltip\n} from '@mantine/core'\nimport { IconArrowLeft, IconArrowRight } from '@tabler/icons-react'\nimport { ArchbaseDataSource } from '@archbase/data'\nimport { useArchbaseV1V2Compatibility } from '@archbase/data'\nimport { useArchbaseDataSourceListener } from '@archbase/data'\n\n// Definindo props com genéricos para os tipos de item das duas listas\nexport interface ArchbaseDualListSelectorProps<T, U> {\n availableItemsDS: ArchbaseDataSource<T, any>\n assignedItemsDS: ArchbaseDataSource<U, any>\n idFieldAvailable: string | ((item: T) => string)\n labelFieldAvailable: string | ((item: T) => string)\n idFieldAssigned: string | ((item: U) => string)\n labelFieldAssigned: string | ((item: U) => string)\n handleCreateAssociationObject: (item: T) => U\n width?: string\n height?: string\n titleAvailable?: string\n titleAssigned?: string\n}\n\nexport function ArchbaseDualListSelector<T, U>({\n availableItemsDS,\n assignedItemsDS,\n idFieldAvailable,\n labelFieldAvailable,\n idFieldAssigned,\n labelFieldAssigned,\n handleCreateAssociationObject,\n width = '400px',\n height = '200px',\n titleAvailable = 'Disponíveis',\n titleAssigned = 'Selecionados'\n}: ArchbaseDualListSelectorProps<T, U>) {\n // 🔄 MIGRAÇÃO V1/V2: Hooks de compatibilidade para ambos DataSources\n const availableV1V2 = useArchbaseV1V2Compatibility<T[]>(\n 'ArchbaseDualListSelector-Available',\n availableItemsDS,\n undefined,\n []\n );\n\n const assignedV1V2 = useArchbaseV1V2Compatibility<U[]>(\n 'ArchbaseDualListSelector-Assigned', \n assignedItemsDS,\n undefined,\n []\n );\n\n const [availableItems, setAvailableItems] = useState<T[]>([])\n const [assignedItems, setAssignedItems] = useState<U[]>([])\n const [selectedAvailable, setSelectedAvailable] = useState<string[]>([])\n const [selectedAssigned, setSelectedAssigned] = useState<string[]>([])\n\n // 🔄 MIGRAÇÃO V1/V2: Função para carregar dados condicionalmente\n const loadItemsData = useCallback(() => {\n if (availableItemsDS) {\n setAvailableItems(availableItemsDS.browseRecords())\n }\n if (assignedItemsDS) {\n setAssignedItems(assignedItemsDS.browseRecords())\n }\n }, [availableItemsDS, assignedItemsDS]);\n\n // 🔄 MIGRAÇÃO V1/V2: Listeners para ambos DataSources\n useArchbaseDataSourceListener<T, any>({\n dataSource: availableItemsDS,\n listener: () => loadItemsData()\n });\n\n useArchbaseDataSourceListener<U, any>({\n dataSource: assignedItemsDS,\n listener: () => loadItemsData()\n });\n\n useEffect(() => {\n loadItemsData();\n }, [loadItemsData])\n\n const getItemId = (item: any, field: string | ((item: any) => string)): string =>\n typeof field === 'function' ? field(item) : item[field]\n\n const getItemLabel = (item: any, field: string | ((item: any) => string)): string =>\n typeof field === 'function' ? field(item) : item[field]\n\n const handleSelect = (setId: React.Dispatch<React.SetStateAction<string[]>>, id: string) => {\n setId((prev) => (prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id]))\n }\n\n const handleAdd = () => {\n selectedAvailable.forEach((id) => {\n const originalItem = availableItems.find((item) => getItemId(item, idFieldAvailable) === id)\n if (originalItem) {\n const newItem = handleCreateAssociationObject(originalItem)\n \n // 🔄 MIGRAÇÃO V1/V2: Usar operações condicionais baseadas na versão\n if (assignedV1V2.isDataSourceV2) {\n // Para DataSource V2: usar métodos otimizados\n assignedItemsDS.insert(newItem)\n assignedItemsDS.save()\n } else {\n // Para DataSource V1: comportamento original + forceUpdate\n assignedItemsDS.insert(newItem)\n assignedItemsDS.save()\n assignedV1V2.v1State.forceUpdate()\n }\n }\n })\n setSelectedAvailable([])\n }\n\n const handleRemove = () => {\n selectedAssigned.forEach((id) => {\n const record = assignedItems.find((item) => getItemId(item, idFieldAssigned) === id)\n if (record) {\n // Preparando o objeto de critério dinâmico\n const criteria =\n typeof idFieldAssigned === 'function'\n ? { customId: idFieldAssigned(record) }\n : { [idFieldAssigned]: id }\n \n // 🔄 MIGRAÇÃO V1/V2: Usar operações condicionais baseadas na versão\n if (assignedV1V2.isDataSourceV2) {\n // Para DataSource V2: usar métodos otimizados\n assignedItemsDS.remove(() => assignedItemsDS.locate(criteria))\n } else {\n // Para DataSource V1: comportamento original + forceUpdate\n assignedItemsDS.remove(() => assignedItemsDS.locate(criteria))\n assignedV1V2.v1State.forceUpdate()\n }\n }\n })\n setSelectedAssigned([])\n }\n\n return (\n <Paper withBorder style={{ display: 'flex', width, height }}>\n <Box style={{ minWidth: '44%', minHeight: height }}>\n <Text>{titleAvailable}</Text>\n <List\n spacing=\"xs\"\n size=\"sm\"\n center\n listStyleType=\"none\"\n style={{\n margin: '6px',\n overflowY: 'auto',\n overflowX: 'hidden',\n height: 'calc(100% - 32px)'\n }}\n >\n {availableItems.map((item) => (\n <List.Item key={getItemId(item, idFieldAvailable)}>\n <Checkbox\n label={getItemLabel(item, labelFieldAvailable)}\n checked={selectedAvailable.includes(getItemId(item, idFieldAvailable))}\n onChange={() =>\n handleSelect(setSelectedAvailable, getItemId(item, idFieldAvailable))\n }\n disabled={assignedItems.some(\n (g) => getItemId(g, idFieldAssigned) === getItemId(item, idFieldAvailable)\n )}\n />\n </List.Item>\n ))}\n </List>\n </Box>\n <Stack gap={5} style={{ minWidth: '10%' }} justify=\"center\" align=\"center\">\n <Tooltip label=\"Adicionar\">\n <ActionIcon onClick={handleAdd} disabled={!selectedAvailable.length}>\n <IconArrowRight />\n </ActionIcon>\n </Tooltip>\n <Tooltip label=\"Remover\">\n <ActionIcon onClick={handleRemove} disabled={!selectedAssigned.length}>\n <IconArrowLeft />\n </ActionIcon>\n </Tooltip>\n </Stack>\n <Box style={{ minWidth: '44%', minHeight: height }}>\n <Text>{titleAssigned}</Text>\n <List\n spacing=\"xs\"\n size=\"sm\"\n center\n listStyleType=\"none\"\n style={{\n margin: '6px',\n overflowY: 'auto',\n overflowX: 'hidden',\n height: 'calc(100% - 32px)'\n }}\n >\n {assignedItems.map((item) => (\n <List.Item key={getItemId(item, idFieldAssigned)}>\n <Checkbox\n label={getItemLabel(item, labelFieldAssigned)}\n checked={selectedAssigned.includes(getItemId(item, idFieldAssigned))}\n onChange={() => handleSelect(setSelectedAssigned, getItemId(item, idFieldAssigned))}\n />\n </List.Item>\n ))}\n </List>\n </Box>\n </Paper>\n )\n}\n","/**\n * RenderProfileUserItem — item de lista para usuário (usado em modais/profile).\n * @status stable\n */\nimport React from 'react'\nimport { Flex, Space, Text } from '@mantine/core'\nimport { forwardRef } from 'react'\nimport { ProfileDto } from '@archbase/security'\n\nexport interface RenderProfileUserItemProps extends React.ComponentPropsWithoutRef<'div'> {\n image: string\n label: string\n description: string\n origin: ProfileDto\n}\n\nexport const RenderProfileUserItem = forwardRef<HTMLDivElement, RenderProfileUserItemProps>(\n ({ image, label, description, origin, ...others }: RenderProfileUserItemProps, ref) => (\n <div ref={ref} {...others}>\n <Flex>\n <Text size=\"sm\" fw={600}>\n {origin ? origin.name:''}\n </Text>\n <Space w=\"lg\" />\n </Flex>\n </div>\n )\n)\n","/**\n * UserModal — modal de cadastro/edição de usuários com roles e ações.\n * @status stable\n */\nimport { ARCHBASE_IOC_API_TYPE, getI18nextInstance, builder, emit } from '@archbase/core'\nimport type { ArchbasePasswordPolicy } from '@archbase/core'\nimport { resolveArchbasePasswordPolicy, validateArchbasePassword } from '@archbase/core'\nimport { IArchbaseDataSourceBase, ArchbaseDataSource } from '@archbase/data'\nimport { ArchbaseCheckbox, ArchbaseEdit, ArchbaseSelect, ArchbasePasswordEdit, ArchbaseAvatarEdit } from '@archbase/components'\nimport { useArchbaseRemoteDataSource, useArchbaseRemoteServiceApi } from '@archbase/data'\nimport { ArchbaseNotifications } from '@archbase/components'\nimport { Grid, Group, Input, ScrollArea, Space, Stack, Text, Modal, Button } from '@mantine/core'\nimport { useArchbaseTranslation } from '@archbase/core';\nimport React, { useEffect, useState } from 'react'\nimport { ArchbaseDualListSelector } from './ArchbaseDualListSelector'\nimport { ArchbaseGroupService } from '@archbase/security'\nimport { ArchbaseProfileService } from '@archbase/security'\nimport { RenderProfileUserItem } from './RenderProfileUserItem'\nimport { GroupDto, ProfileDto, UserDto, UserGroupDto } from '@archbase/security'\n\nexport interface UserModalOptions {\n // Campos de identificação\n showNickname?: boolean; // nickname - Apelido\n\n // Campos de perfil e grupos\n showProfile?: boolean; // profile - Perfil do usuário\n showGroups?: boolean; // groups - Grupos (DualListSelector)\n\n // Campos de configuração de senha\n showChangePasswordOnNextLogin?: boolean; // changePasswordOnNextLogin\n showAllowPasswordChange?: boolean; // allowPasswordChange\n showPasswordNeverExpires?: boolean; // passwordNeverExpires\n /** Exibe, somente leitura, a data da última troca de senha (passwordChangedAt) */\n showPasswordChangedAt?: boolean;\n /**\n * Critérios de senha forte exigidos no cadastro.\n * `true` aplica a política padrão do Archbase; um objeto permite ajustar cada critério.\n * Quando ausente a senha é apenas obrigatória na inclusão (comportamento original).\n */\n passwordPolicy?: ArchbasePasswordPolicy | boolean;\n /** Indicador se a lista de critérios deve ser exibida abaixo do campo senha. Padrão: true */\n showPasswordRequirements?: boolean;\n /**\n * Inclui login, e-mail e nome do usuário na lista de termos proibidos dentro da senha.\n * Só tem efeito quando `passwordPolicy` está ativa. Padrão: true\n */\n forbidPersonalDataInPassword?: boolean;\n\n // Campos de status da conta\n showAccountConfigLabel?: boolean;\n showAccountDeactivated?: boolean; // accountDeactivated\n showAccountLocked?: boolean; // accountLocked\n showIsAdministrator?: boolean;\n\n // Configurações de campos obrigatórios\n requiredNickname?: boolean;\n\n /** Tamanho máximo da imagem do avatar em kilobytes */\n avatarMaxSizeKB?: number;\n /** Qualidade da compressão da imagem do avatar (0 a 1), sendo 1 melhor qualidade */\n avatarImageQuality?: number;\n /** Maior dimensão (px) do avatar final — a imagem é redimensionada automaticamente. 0 mantém a resolução original */\n avatarMaxOutputSizePx?: number;\n\n /** Configuração de permissão de edição de campos */\n allowEditEmail?: boolean;\n\n customContentBefore?: (user: UserDto) => React.ReactNode;\n\n customContentAfter?: (user: UserDto) => React.ReactNode;\n\n /** Nome do perfil padrão que um novo usuário já virá pré-preenchido */\n userDefaultProfile?: string;\n /** Nome dos grupos padrões que um novo usuário já virá pré-preenchido */\n userDefaultGroups?: string[];\n}\n\nexport const defaultUserModalOptions: UserModalOptions = {\n // Campos de identificação\n showNickname: true,\n\n // Campos de perfil e grupos\n showProfile: true,\n showGroups: true,\n\n // Campos de configuração de senha\n showChangePasswordOnNextLogin: true,\n showAllowPasswordChange: true,\n showPasswordNeverExpires: true,\n showPasswordChangedAt: true,\n showPasswordRequirements: true,\n forbidPersonalDataInPassword: true,\n\n // Campos de status da conta\n showAccountConfigLabel: true,\n showAccountDeactivated: true,\n showAccountLocked: true,\n showIsAdministrator: true,\n\n // Configurações de campos obrigatórios\n requiredNickname: true,\n\n avatarMaxSizeKB: 2000,\n avatarImageQuality: 1,\n avatarMaxOutputSizePx: 512,\n\n allowEditEmail: true,\n}\n\nexport interface UserModalProps {\n dataSource: IArchbaseDataSourceBase<UserDto>\n opened: boolean\n onClickOk: (record?: UserDto, result?: any) => void\n onClickCancel: (record?: UserDto) => void\n onCustomSave?: (record?: UserDto, callback?: Function) => void\n onAfterSave?: (record?: UserDto) => void\n options?: UserModalOptions\n}\n\nexport const UserModal = (props: UserModalProps) => {\n const [passwordError, setPasswordError] = useState(\"\")\n const options = { ...defaultUserModalOptions, ...(props.options ?? {}) }\n\n // Somente leitura: o backend atualiza passwordChangedAt a cada troca de senha.\n const rawPasswordChangedAt = props.dataSource.getFieldValue('passwordChangedAt') as string | undefined\n const parsedPasswordChangedAt = rawPasswordChangedAt ? new Date(rawPasswordChangedAt) : undefined\n const passwordChangedAt =\n parsedPasswordChangedAt && !Number.isNaN(parsedPasswordChangedAt.getTime())\n ? parsedPasswordChangedAt.toLocaleString()\n : undefined\n\n // Política de senha forte: quando ativa, acrescenta os dados pessoais do usuário à blocklist.\n const basePasswordPolicy = resolveArchbasePasswordPolicy(options.passwordPolicy)\n const personalTerms = options.forbidPersonalDataInPassword\n ? (['name', 'nickname', 'email'] as const)\n .map((field) => {\n const term = props.dataSource.getFieldValue(field) as string | undefined\n // Do e-mail interessa apenas a parte local: o domínio é comum a todos os usuários.\n return field === 'email' && term ? term.split('@')[0] : term\n })\n .filter((term): term is string => typeof term === 'string' && term.trim().length >= 3)\n : []\n const passwordPolicy: ArchbasePasswordPolicy | undefined = basePasswordPolicy\n ? {\n ...basePasswordPolicy,\n blocklist: [...(basePasswordPolicy.blocklist ?? []), ...personalTerms],\n }\n : undefined\n\n const groupApi = useArchbaseRemoteServiceApi<ArchbaseGroupService>(ARCHBASE_IOC_API_TYPE.Group)\n const { dataSource: dsGroups } = useArchbaseRemoteDataSource<GroupDto, string>({\n name: `dsGroups`,\n service: groupApi,\n pageSize: 9999,\n loadOnStart: true,\n sort: ['name:asc'],\n onError: (error, origin) => {\n ArchbaseNotifications.showError(getI18nextInstance().t('archbase:WARNING'), error, origin)\n }\n })\n console.log(\"versão 12/05/2026\")\n\n const profileApi = useArchbaseRemoteServiceApi<ArchbaseProfileService>(ARCHBASE_IOC_API_TYPE.Profile)\n const { dataSource: dsProfiles } = useArchbaseRemoteDataSource<ProfileDto, string>({\n name: `dsProfiles`,\n service: profileApi,\n pageSize: 9999,\n loadOnStart: true,\n sort: ['name:asc'],\n onError: (error, origin) => {\n ArchbaseNotifications.showError(getI18nextInstance().t('archbase:WARNING'), error, origin)\n }\n })\n\n useEffect(() => {\n setPasswordError(\"\")\n }, [props.dataSource.getFieldValue(\"password\")])\n\n const setDefaultValues = async () => {\n if (!props.dataSource.isInserting()) return;\n\n if (options.userDefaultProfile) {\n const filter = emit(builder.eq(\"name\", options.userDefaultProfile))\n const result = await profileApi.findAllWithFilter(filter, 0, 1)\n if (result && result.content.length > 0) {\n props.dataSource.setFieldValue(\"profile\", result.content[0])\n }\n }\n if (options.userDefaultGroups) {\n const filter = emit(builder.in(\"name\", options.userDefaultGroups))\n const result = await groupApi.findAllWithFilter(filter, 0, 500)\n if (result && result.content.length > 0) {\n props.dataSource.setFieldValue(\"groups\", result.content.map(group => UserGroupDto.newInstance(group)))\n }\n }\n }\n\n useEffect(() => {\n if (props.opened) {\n setDefaultValues()\n }\n }, [props.opened])\n\n const handleSave = () => {\n const currentRecord = props.dataSource.getCurrentRecord()!;\n if (!currentRecord.password && props.dataSource.isInserting()) {\n setPasswordError(getI18nextInstance().t('archbase:Informe a senha'))\n return;\n }\n\n // Na edição a senha em branco significa \"manter a senha atual\", então não é validada.\n if (passwordPolicy && currentRecord.password) {\n const result = validateArchbasePassword(currentRecord.password, passwordPolicy)\n if (!result.valid) {\n setPasswordError(result.error!)\n return;\n }\n }\n\n if (props.onCustomSave) {\n props.onCustomSave(currentRecord, (success: boolean) => {\n if (success && props.onAfterSave) {\n props.onAfterSave(currentRecord);\n }\n props.onClickOk(currentRecord, success);\n });\n } else {\n props.onClickOk(currentRecord, true);\n }\n };\n\n const handleCancel = () => {\n props.onClickCancel(props.dataSource.getCurrentRecord()!);\n };\n\n return (\n <Modal\n opened={props.opened}\n onClose={handleCancel}\n title={getI18nextInstance().t('archbase:Usuário')}\n size=\"80%\"\n styles={{ content: { maxWidth: 1000 } }}\n >\n <ScrollArea style={{ height: '500px' }}>\n <Stack w={\"98%\"}>\n {options?.customContentBefore && (\n <>\n {options.customContentBefore(props.dataSource.getCurrentRecord()!)}\n </>\n )}\n <Grid>\n <Grid.Col span={{ base: 12, md: 6, lg: 6 }}>\n <Group>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Nome completo')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe o nome completo do usuário')}`}\n dataSource={props.dataSource}\n dataField=\"name\"\n required\n width={'calc(100% - 208px)'}\n />\n {options.showNickname && (\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Apelido')}`}\n placeholder={`${getI18nextInstance().t('archbase:Apelido')}`}\n dataSource={props.dataSource}\n dataField=\"nickname\"\n required={options.requiredNickname}\n />\n )}\n </Group>\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 6, lg: 6 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Descrição do usuário')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe a descrição do usuário')}`}\n dataSource={props.dataSource}\n dataField=\"description\"\n required\n />\n </Grid.Col>\n </Grid>\n <Grid>\n <Grid.Col span={{ base: 12, md: 6, lg: 6 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:E-mail')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe o e-mail do usuário')}`}\n dataSource={props.dataSource}\n onChangeValue={(value) => props.dataSource.setFieldValue(\"userName\", value)}\n dataField=\"email\"\n readOnly={props.dataSource.isEditing() ? !options.allowEditEmail : false}\n required\n />\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 6, lg: 6 }}>\n <ArchbasePasswordEdit\n label={`${getI18nextInstance().t('archbase:Senha usuário')}`}\n dataSource={props.dataSource}\n dataField=\"password\"\n error={passwordError}\n required={props.dataSource.getFieldValue(\"isNewUser\")}\n passwordPolicy={passwordPolicy}\n showPasswordRequirements={options.showPasswordRequirements}\n />\n </Grid.Col>\n </Grid>\n <Grid>\n {options.showProfile && (\n <Grid.Col span={{ base: 12, md: 6, lg: 6 }}>\n <ArchbaseSelect<UserDto, string, ProfileDto>\n label={`${getI18nextInstance().t('archbase:Perfil do usuário')}`}\n dataSource={props.dataSource}\n dataField=\"profile\"\n options={dsProfiles}\n allowDeselect={true}\n optionsLabelField=\"nome\"\n itemComponent={RenderProfileUserItem}\n getOptionLabel={(option: ProfileDto) => option.name}\n getOptionValue={(option: ProfileDto) => option.id}\n />\n </Grid.Col>\n )}\n </Grid>\n\n <Grid>\n <Grid.Col span={{ base: 12 }}>\n {options.showAccountConfigLabel && (<Text fz={14} fw={500}>Informe</Text>)}\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 4, lg: 4 }}>\n <Stack gap={'lg'}>\n {options.showChangePasswordOnNextLogin && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"changePasswordOnNextLogin\"\n label={`${getI18nextInstance().t('archbase:Deve alterar senha próximo login ?')}`}\n />\n </Input.Wrapper>\n )}\n {options.showAllowPasswordChange && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"allowPasswordChange\"\n label={`${getI18nextInstance().t('archbase:Pode alterar a senha ?')}`}\n />\n </Input.Wrapper>\n )}\n {options.showPasswordNeverExpires && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"passwordNeverExpires\"\n label={`${getI18nextInstance().t('archbase:Senha nunca expira ?')}`}\n />\n <Text fz={12} c=\"dimmed\">\n {getI18nextInstance().t(\n 'archbase:Desmarcado, a senha expira conforme a política de validade do servidor. Para exigir a troca agora, use \"Deve alterar senha próximo login\".'\n )}\n </Text>\n </Input.Wrapper>\n )}\n {options.showPasswordChangedAt && passwordChangedAt && (\n <Text fz={12} c=\"dimmed\">\n {`${getI18nextInstance().t('archbase:Última troca de senha')}: ${passwordChangedAt}`}\n </Text>\n )}\n </Stack>\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 4, lg: 4 }}>\n <Stack gap=\"lg\">\n {options.showAccountDeactivated && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"accountDeactivated\"\n label={`${getI18nextInstance().t('archbase:Conta desativada ?')}`}\n />\n </Input.Wrapper>\n )}\n {options.showAccountLocked && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"accountLocked\"\n label={`${getI18nextInstance().t('archbase:Conta bloqueada ?')}`}\n />\n </Input.Wrapper>\n )}\n {options.showIsAdministrator && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"isAdministrator\"\n label={`${getI18nextInstance().t('archbase:Administrador ?')}`}\n />\n </Input.Wrapper>\n )}\n </Stack>\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 4, lg: 4 }}>\n <Stack gap=\"lg\">\n <ArchbaseAvatarEdit\n label={getI18nextInstance().t('archbase:Foto do usuário')}\n dataSource={props.dataSource}\n dataField=\"avatar\"\n width={120}\n height={120}\n maxSizeKB={options.avatarMaxSizeKB}\n imageQuality={options.avatarImageQuality}\n maxOutputSizePx={options.avatarMaxOutputSizePx}\n />\n </Stack>\n </Grid.Col>\n </Grid>\n\n {options.showGroups && (\n <Grid>\n <Grid.Col span={{ base: 12 }}>\n <Text fz={14} fw={500}>Grupos</Text>\n </Grid.Col>\n <Grid.Col span={{ base: 12 }}>\n <ArchbaseDualListSelector<GroupDto, UserGroupDto>\n titleAvailable={getI18nextInstance().t('archbase:Disponíveis')}\n titleAssigned={getI18nextInstance().t('archbase:Selecionados')}\n assignedItemsDS={\n new ArchbaseDataSource('dsDualList', {\n records: props.dataSource.getFieldValue('groups'),\n grandTotalRecords: props.dataSource.getFieldValue('groups').length,\n currentPage: 0,\n totalPages: 0,\n pageSize: 999999\n })\n }\n width=\"100%\"\n height=\"200px\"\n availableItemsDS={dsGroups}\n handleCreateAssociationObject={(group: GroupDto) => {\n return UserGroupDto.newInstance(group)\n }}\n idFieldAssigned={(item: UserGroupDto) => (item && item.group ? item.group.id : '')}\n idFieldAvailable={'id'}\n labelFieldAssigned={(item: UserGroupDto) => (item && item.group ? item.group.name : '')}\n labelFieldAvailable={'name'}\n />\n </Grid.Col>\n </Grid>\n )}\n {options?.customContentAfter && (\n <>\n {options.customContentAfter(props.dataSource.getCurrentRecord()!)}\n </>\n )}\n <Space h={'12px'} />\n </Stack>\n </ScrollArea>\n \n <Group justify=\"flex-end\" mt=\"md\">\n <Button variant=\"default\" onClick={handleCancel}>\n {getI18nextInstance().t('archbase:Cancelar')}\n </Button>\n <Button onClick={handleSave}>\n {getI18nextInstance().t('archbase:Salvar')}\n </Button>\n </Group>\n </Modal>\n )\n}\n","/**\n * GroupModal — modal para gerenciar grupos/roles de usuários.\n * @status stable\n */\nimport React from 'react'\nimport { Grid, ScrollArea, Stack, Modal, Button, Group } from '@mantine/core'\nimport { getI18nextInstance } from '@archbase/core';\nimport { GroupDto } from '@archbase/security'\nimport { IArchbaseDataSourceBase } from '@archbase/data'\nimport { ArchbaseEdit } from '@archbase/components'\n\nexport interface GroupModalOptions {\n customContentBefore?: (group: GroupDto) => React.ReactNode;\n customContentAfter?: (group: GroupDto) => React.ReactNode;\n}\n\nexport interface GroupModalProps {\n dataSource: IArchbaseDataSourceBase<GroupDto>\n opened: boolean\n onClickOk: (record?: GroupDto, result?: any) => void\n onClickCancel: (record?: GroupDto) => void\n onCustomSave?: (record?: GroupDto, callback?: Function) => void\n onAfterSave?: (record?: GroupDto) => void\n options?: GroupModalOptions\n}\n\nexport const GroupModal = (props: GroupModalProps) => {\n const options = {...(props.options ?? {}) }\n \n const handleSave = () => {\n if (props.onCustomSave) {\n props.onCustomSave(props.dataSource.getCurrentRecord()!, (success: boolean) => {\n if (success && props.onAfterSave) {\n props.onAfterSave(props.dataSource.getCurrentRecord()!);\n }\n props.onClickOk(props.dataSource.getCurrentRecord()!, success);\n });\n } else {\n props.onClickOk(props.dataSource.getCurrentRecord()!, true);\n }\n };\n\n const handleCancel = () => {\n props.onClickCancel(props.dataSource.getCurrentRecord()!);\n };\n \n return (\n <Modal\n opened={props.opened}\n onClose={handleCancel}\n title={getI18nextInstance().t('archbase:Grupo')}\n size=\"60%\"\n styles={{content: {maxWidth: 1000}}}\n >\n <ScrollArea style={{ height: '460px' }}>\n <Stack w={\"98%\"}>\n {options?.customContentBefore && options.customContentBefore(props.dataSource.getCurrentRecord()!)}\n <Grid>\n <Grid.Col span={{ base: 12 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Nome do grupo')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe o nome do grupo')}`}\n dataSource={props.dataSource}\n dataField=\"name\"\n />\n </Grid.Col>\n <Grid.Col span={{ base: 12 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Descrição do grupo')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe a descrição do grupo')}`}\n dataSource={props.dataSource}\n dataField=\"description\"\n />\n </Grid.Col>\n </Grid>\n {options?.customContentAfter && options.customContentAfter(props.dataSource.getCurrentRecord()!)}\n \n <Group justify=\"flex-end\" mt=\"md\">\n <Button variant=\"default\" onClick={handleCancel}>\n {getI18nextInstance().t('archbase:Cancelar')}\n </Button>\n <Button onClick={handleSave}>\n {getI18nextInstance().t('archbase:Salvar')}\n </Button>\n </Group>\n </Stack>\n </ScrollArea>\n </Modal>\n )\n}\n","/**\n * ApiTokenModal — modal para criação/edição de tokens de API.\n * @status stable\n */\nimport { ArchbaseDataSource } from '@archbase/data';\nimport { ArchbaseAsyncSelect, ArchbaseEdit, OptionsResult } from '@archbase/components';\nimport { useArchbaseRemoteServiceApi } from '@archbase/data';\nimport { Page } from '@archbase/data';\nimport { Modal } from '@mantine/core';\nimport { Grid, Group, Image, ScrollArea, Text, Button } from '@mantine/core';\nimport { DateTimePicker, DateValue } from '@mantine/dates';\nimport { useFocusTrap } from '@mantine/hooks';\nimport { ARCHBASE_IOC_API_TYPE, builder, convertDateToISOString, emit, processErrorMessage, isBase64Validate, getI18nextInstance } from '@archbase/core';\nimport { useArchbaseV1V2Compatibility } from '@archbase/data';\nimport { useArchbaseTranslation } from '@archbase/core';\nimport React, { useState } from 'react';\nimport { NO_USER } from './ArchbaseSecurityView';\nimport { ArchbaseUserService } from '@archbase/security';\nimport { ApiTokenDto, GroupDto, UserDto } from '@archbase/security';\n\nexport const UserSelectItem = ({ image, label, description, ...others }) => (\n\t<div {...others}>\n\t\t<Group grow>\n\t\t\t<img style={{maxWidth:'32px'}} src={image} />\n\t\t\t<div>\n\t\t\t\t<Text size=\"sm\">{label}</Text>\n\t\t\t\t<Text size=\"xs\" opacity={0.65}>\n\t\t\t\t\t{description}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t</Group>\n\t</div>\n);\n\nexport interface ApiTokenModalProps {\n\tdataSource: ArchbaseDataSource<ApiTokenDto, string>;\n\topened: boolean;\n\tonClickOk: (record?: ApiTokenDto, result?: any) => void;\n\tonClickCancel: (record?: ApiTokenDto) => void;\n\tonCustomSave?: (record?: ApiTokenDto, callback?: Function) => void;\n\tonAfterSave?: (record?: ApiTokenDto) => void;\n}\n\nexport const ApiTokenModal = (props: ApiTokenModalProps) => {\n\tconst focusTrapRef = useFocusTrap();\n\tconst [value, setValue] = useState<DateValue | undefined>();\n\tconst userApi = useArchbaseRemoteServiceApi<ArchbaseUserService>(ARCHBASE_IOC_API_TYPE.User);\n\n\t// 🔄 MIGRAÇÃO V1/V2: Hook de compatibilidade para ApiTokenModal\n\tconst v1v2Compatibility = useArchbaseV1V2Compatibility<string>(\n\t\t'ApiTokenModal',\n\t\tprops.dataSource,\n\t\t'expirationDate',\n\t\t''\n\t);\n\n\t// 🔄 MIGRAÇÃO V1/V2: Debug info para desenvolvimento\n\tif (process.env.NODE_ENV === 'development' && props.dataSource) {\n\t\tconsole.log(`[ApiTokenModal] DataSource version: ${v1v2Compatibility.dataSourceVersion}`);\n\t}\n\n\tconst handleChange = (value: DateValue) => {\n\t\tif (!value) {\n\t\t\t// 🔄 MIGRAÇÃO V1/V2: Usar handleValueChange do padrão de compatibilidade\n\t\t\tv1v2Compatibility.handleValueChange(undefined);\n\t\t} else {\n\t\t\t// Convert string to Date if needed before calling convertDateToISOString\n\t\t\tconst dateValue = typeof value === 'string' ? new Date(value) : value;\n\t\t\tconst isoString = convertDateToISOString(dateValue);\n\t\t\t// 🔄 MIGRAÇÃO V1/V2: Usar handleValueChange do padrão de compatibilidade\n\t\t\tv1v2Compatibility.handleValueChange(isoString);\n\t\t}\n\t\tsetValue(value);\n\t};\n\n\tconst loadRemoteUsers = async (page: number, value: string): Promise<OptionsResult<UserDto>> => {\n\t\treturn new Promise<OptionsResult<UserDto>>(async (resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst filter = emit(builder.or(builder.eq('name', `^*${value.trim()}*`)));\n\t\t\t\tconst result: Page<UserDto> = await userApi.findAllWithFilter(filter, page, 20);\n\t\t\t\tresolve({\n\t\t\t\t\toptions: result.content,\n\t\t\t\t\tpage: result.pageable!.pageNumber,\n\t\t\t\t\ttotalPages: result.totalPages,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\treject(processErrorMessage(error));\n\t\t\t}\n\t\t});\n\t};\n\n\tconst handleSave = () => {\n\t\tif (props.onCustomSave) {\n\t\t\tprops.onCustomSave(props.dataSource.current, (success: boolean) => {\n\t\t\t\tif (success && props.onAfterSave) {\n\t\t\t\t\tprops.onAfterSave(props.dataSource.current);\n\t\t\t\t}\n\t\t\t\tprops.onClickOk(props.dataSource.current, success);\n\t\t\t});\n\t\t} else {\n\t\t\tprops.onClickOk(props.dataSource.current, true);\n\t\t}\n\t};\n\n\tconst handleCancel = () => {\n\t\tprops.onClickCancel(props.dataSource.current);\n\t};\n\n\treturn (\n\t\t<Modal\n\t\t\topened={props.opened}\n\t\t\tonClose={handleCancel}\n\t\t\ttitle={getI18nextInstance().t('archbase:Token de API')}\n\t\t\tsize=\"50%\"\n\t\t>\n\t\t\t<ScrollArea style={{ height: '300px' }}>\n\t\t\t\t<ArchbaseEdit\n\t\t\t\t\tlabel={`${getI18nextInstance().t('archbase:Nome do token')}`}\n\t\t\t\t\tplaceholder={`${getI18nextInstance().t('archbase:Informe o nome do token')}`}\n\t\t\t\t\tdataSource={props.dataSource}\n\t\t\t\t\tdataField=\"name\"\n\t\t\t\t/>\n\t\t\t\t<ArchbaseEdit\n\t\t\t\t\tlabel={`${getI18nextInstance().t('archbase:Descrição do token')}`}\n\t\t\t\t\tplaceholder={`${getI18nextInstance().t('archbase:Informe a descrição do token')}`}\n\t\t\t\t\tdataSource={props.dataSource}\n\t\t\t\t\tdataField=\"description\"\n\t\t\t\t/>\n\t\t\t\t<DateTimePicker\n\t\t\t\t\twithSeconds={true}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tlabel=\"Data/hora expiração\"\n\t\t\t\t\tplaceholder={'Selecione a data de expiração'}\n\t\t\t\t/>\n\t\t\t\t<ArchbaseAsyncSelect<any, string, UserDto>\n\t\t\t\t\tlabel={`${getI18nextInstance().t('archbase:Usuário')}`}\n\t\t\t\t\tdataSource={props.dataSource}\n\t\t\t\t\tdataField=\"user\"\n\t\t\t\t\tplaceholder={`${getI18nextInstance().t('archbase:Digite aqui o nome do usuário')}`}\n\t\t\t\t\tgetOptionLabel={(option: UserDto) => option && option.email ? option.email : ''}\n\t\t\t\t\tgetOptionValue={(option: UserDto) => option && option.id ? option.id.toString() : ''}\n\t\t\t\t\tgetOptions={loadRemoteUsers}\n\t\t\t\t\tdebounceTime={500}\n\t\t\t\t\tminCharsToSearch={1}\n\t\t\t\t\titemComponent={UserSelectItem}\n\t\t\t\t/>\n\t\t\t</ScrollArea>\n\t\t\t\n\t\t\t<Group justify=\"flex-end\" mt=\"md\">\n\t\t\t\t<Button variant=\"default\" onClick={handleCancel}>\n\t\t\t\t\t{getI18nextInstance().t('archbase:Cancelar')}\n\t\t\t\t</Button>\n\t\t\t\t<Button onClick={handleSave}>\n\t\t\t\t\t{getI18nextInstance().t('archbase:Salvar')}\n\t\t\t\t</Button>\n\t\t\t</Group>\n\t\t</Modal>\n\t);\n};\n","/**\n * PermissionsSelectorModal — modal para selecionar permissões/roles.\n * @status stable\n */\nimport React, { useCallback, useEffect, useState, useMemo } from \"react\";\nimport { ARCHBASE_IOC_API_TYPE, getKeyByEnumValue, getI18nextInstance } from \"@archbase/core\";\nimport { ActionIcon, Badge, Button, Group, Modal, Paper, ScrollArea, Stack, Text, TextInput, Tooltip, Tree, TreeNodeData, useMantineColorScheme, useTree } from \"@mantine/core\";\nimport { IconArrowLeft, IconArrowRight, IconBorderCornerSquare, IconChevronDown } from \"@tabler/icons-react\";\nimport { SecurityType } from \"@archbase/security\";\nimport { useArchbaseRemoteServiceApi, IArchbaseDataSourceBase } from \"@archbase/data\";\nimport { ResouceActionPermissionDto, ResoucePermissionsWithTypeDto } from \"@archbase/security\";\nimport { ArchbaseResourceService } from \"@archbase/security\";\nimport { useDebouncedValue } from \"@mantine/hooks\";\nimport { ArchbaseSpaceBottom, ArchbaseSpaceFill, ArchbaseSpaceFixed } from \"@archbase/layout\";\n\nconst translateDelimitedString = (inputString) => {\n const delimiter = \"->\"\n if (inputString.includes(delimiter)) {\n const parts = inputString.split(delimiter).map(part => part.trim());\n\n const translatedParts = parts.map(part => getI18nextInstance().t(part));\n\n return translatedParts.join(` ${delimiter} `);\n }\n\n return getI18nextInstance().t(inputString);\n};\n\nexport interface PermissionsSelectorProps {\n dataSource: IArchbaseDataSourceBase<any> | null\n opened: boolean\n close: () => void\n}\n\nexport function PermissionsSelectorModal({ dataSource, opened, close }: PermissionsSelectorProps) {\n // Memoiza os valores do dataSource para evitar recálculos\n const name = useMemo(() => dataSource?.getFieldValue(\"name\") || '', [dataSource]);\n const securityId = useMemo(() => dataSource?.getFieldValue(\"id\") || '', [dataSource]);\n const type = useMemo(() => dataSource?.getFieldValue(\"type\") || '', [dataSource]);\n\n const availablePermissionsTree = useTree()\n const grantedPermissionsTree = useTree()\n const [availablePermissions, setAvailablePermissions] = useState<ResoucePermissionsWithTypeDto[]>([])\n const [grantedPermissions, setGrantedPermissions] = useState<ResoucePermissionsWithTypeDto[]>([])\n const [selectedAvailablePermission, setSelectedAvailablePermission] = useState<TreeNodeData>()\n const [selectedGrantedPermission, setSelectedGrantedPermission] = useState<TreeNodeData>()\n const [availablePermissionsFilter, setAvailablePermissionsFilter] = useState(\"\")\n const [debouncedAvailablePermissionsFilter] = useDebouncedValue(availablePermissionsFilter, 200);\n const [grantedPermissionsFilter, setGrantedPermissionsFilter] = useState(\"\")\n const [debouncedGrantedPermissionsFilter] = useDebouncedValue(grantedPermissionsFilter, 200);\n\n\n const resourceApi = useArchbaseRemoteServiceApi<ArchbaseResourceService>(ARCHBASE_IOC_API_TYPE.Resource)\n\n const { colorScheme } = useMantineColorScheme();\n const selectedColor = colorScheme === \"dark\" ? \"var(--mantine-primary-color-7)\" : \"var(--mantine-primary-color-4)\"\n\n const permissionsGrantedData = useMemo(() => grantedPermissions\n .sort((a, b) => a.resourceDescription.localeCompare(b.resourceDescription))\n .map(resourcePermissions => {\n return (\n {\n value: resourcePermissions.resourceId,\n label: resourcePermissions.resourceDescription,\n children: resourcePermissions.permissions\n .filter(permission => permission.actionDescription.toLowerCase().includes(debouncedGrantedPermissionsFilter.toLowerCase()))\n .sort((a, b) => a.actionDescription.localeCompare(b.actionDescription))\n .map(permission => {\n return {\n value: permission.actionId,\n label: permission.actionDescription,\n nodeProps: {\n permissionId: permission.permissionId,\n types: permission.types ?? [],\n owner: resourcePermissions\n }\n }\n })\n }\n )\n }), [grantedPermissions, debouncedGrantedPermissionsFilter])\n\n const grantedPermissionsActionIds = useMemo(() => grantedPermissions\n .map(resourcePermissions => resourcePermissions.permissions.map(permission => permission.actionId))\n .flat(), [grantedPermissions])\n\n const allPermissionsData = useMemo(() => availablePermissions\n .sort((a, b) => a.resourceDescription.localeCompare(b.resourceDescription))\n .map(resourcePermissions => {\n return (\n {\n value: resourcePermissions.resourceId,\n label: resourcePermissions.resourceDescription,\n children: resourcePermissions.permissions\n .filter(permission => permission.actionDescription.toLowerCase().includes(debouncedAvailablePermissionsFilter.toLowerCase()))\n .sort((a, b) => a.actionDescription.localeCompare(b.actionDescription))\n .map(permission => {\n const permissionGranted = grantedPermissions\n .find(resourcePermissionsGranted => resourcePermissionsGranted.resourceId === resourcePermissions.resourceId)?.permissions\n .find(permissionGranted => permissionGranted.actionId === permission.actionId)\n return (\n {\n value: permission.actionId,\n label: permission.actionDescription,\n nodeProps: {\n granted: grantedPermissionsActionIds.includes(permission.actionId) && permissionGranted?.types?.includes(getKeyByEnumValue(SecurityType, type)!),\n owner: resourcePermissions\n }\n }\n )\n })\n }\n )\n }), [availablePermissions, grantedPermissions, grantedPermissionsActionIds, type, debouncedAvailablePermissionsFilter])\n\n const loadPermissions = useCallback(async () => {\n if (securityId) {\n const permissionsGranted = await resourceApi.getPermissionsBySecurityId(securityId, type)\n const allPermissions = await resourceApi.getAllPermissionsAvailable()\n setAvailablePermissions(allPermissions)\n setGrantedPermissions(permissionsGranted)\n }\n }, [securityId, type])\n\n const handleAdd = useCallback(() => {\n if (selectedAvailablePermission?.value && securityId) {\n resourceApi.createPermission(securityId, selectedAvailablePermission.value, type)\n .then((resouceActionPermissionDto: ResouceActionPermissionDto) => {\n if (resouceActionPermissionDto) {\n setGrantedPermissions(permissionsGranted => {\n let updatedPermissionsGranted;\n if (permissionsGranted.map(resourcePermissions => resourcePermissions.resourceId).includes(resouceActionPermissionDto.resourceId)) {\n updatedPermissionsGranted = permissionsGranted.map(resourcePermissions => {\n if (resourcePermissions.resourceId === resouceActionPermissionDto.resourceId) {\n if (resourcePermissions.permissions.map(permission => permission.actionId).includes(selectedAvailablePermission.value)) {\n return (\n {\n ...resourcePermissions,\n permissions: resourcePermissions.permissions.map(permission =>\n permission.actionId === selectedAvailablePermission.value ? {\n ...permission,\n permissionId: resouceActionPermissionDto.permissionId,\n types: [...(permission.types ?? []), getKeyByEnumValue(SecurityType, type)!],\n } : permission\n )\n }\n )\n }\n return (\n {\n ...resourcePermissions,\n permissions: [...(resourcePermissions.permissions ?? []),\n {\n actionId: resouceActionPermissionDto.actionId,\n actionDescription: resouceActionPermissionDto.actionDescription,\n permissionId: resouceActionPermissionDto.permissionId,\n types: [getKeyByEnumValue(SecurityType, type)!]\n }]\n }\n )\n }\n return resourcePermissions\n });\n } else {\n updatedPermissionsGranted = [\n ...permissionsGranted,\n {\n resourceId: resouceActionPermissionDto.resourceId,\n resourceDescription: resouceActionPermissionDto.resourceDescription,\n permissions: [\n {\n actionId: resouceActionPermissionDto.actionId,\n actionDescription: resouceActionPermissionDto.actionDescription,\n permissionId: resouceActionPermissionDto.permissionId,\n types: [getKeyByEnumValue(SecurityType, type)!]\n }\n ]\n }\n ]\n }\n\n return updatedPermissionsGranted\n })\n\n const resourceAvailablePermissions = allPermissionsData\n .filter((resourcePermissionsNode: any) => resourcePermissionsNode.value === selectedAvailablePermission?.nodeProps?.owner?.resourceId)\n .map((resourcePermissionsNode: any) => resourcePermissionsNode.children).flat()\n\n const previousSelectedPermissionIndex = resourceAvailablePermissions.map((permission: any) => permission.value).indexOf(selectedAvailablePermission.value)\n const nextSelectedAvailablePermission = resourceAvailablePermissions\n .find((permissionNode: any, index: any) => !permissionNode?.nodeProps?.granted\n && permissionNode?.value !== selectedAvailablePermission.value\n && (resourceAvailablePermissions.length > previousSelectedPermissionIndex + 1\n ? index > previousSelectedPermissionIndex\n : true))\n if (nextSelectedAvailablePermission?.value) {\n availablePermissionsTree.select(nextSelectedAvailablePermission.value)\n }\n grantedPermissionsTree.expand(resouceActionPermissionDto.resourceId)\n setSelectedAvailablePermission(nextSelectedAvailablePermission)\n }\n })\n }\n }, [selectedAvailablePermission, securityId, type, resourceApi, allPermissionsData, availablePermissions, grantedPermissions, availablePermissionsTree, grantedPermissionsTree])\n\n const handleRemove = useCallback(() => {\n if (selectedGrantedPermission?.nodeProps?.permissionId) {\n resourceApi.deletePermission(selectedGrantedPermission.nodeProps.permissionId)\n .then(() => {\n setGrantedPermissions(permissionsGranted => {\n const updatedPermissionsGranted = [...permissionsGranted]\n .filter(resourcePermissions => {\n let hasOnePermissionOnResource = true\n resourcePermissions.permissions?.forEach(permission => {\n if (permission.permissionId !== undefined\n && permission.permissionId === selectedGrantedPermission?.nodeProps?.permissionId\n && resourcePermissions.permissions.length === 1\n && permission?.types?.length === 1\n && permission.types[0] === getKeyByEnumValue(SecurityType, type)) {\n hasOnePermissionOnResource = false;\n }\n })\n return hasOnePermissionOnResource;\n })\n .map(resourcePermissions => {\n const resource: ResoucePermissionsWithTypeDto = selectedGrantedPermission?.nodeProps?.owner\n if (resourcePermissions.resourceId === resource.resourceId) {\n if (selectedGrantedPermission?.nodeProps?.types?.length === 1) {\n return ({\n ...resourcePermissions,\n permissions: [...(resourcePermissions.permissions ?? [])\n .filter(permission => permission.permissionId !== selectedGrantedPermission?.nodeProps?.permissionId)]\n })\n }\n return (\n {\n ...resourcePermissions,\n permissions: (resourcePermissions.permissions ?? [])\n .map(permission => permission.actionId === selectedGrantedPermission.value\n ? ({\n actionId: permission.actionId,\n actionDescription: permission.actionDescription,\n types: [...(permission.types?.filter(currentType => currentType && (currentType !== getKeyByEnumValue(SecurityType, type))) ?? [])]\n }) : permission)\n }\n )\n }\n return resourcePermissions\n })\n return updatedPermissionsGranted\n })\n\n const resourceGrantedPermissions = permissionsGrantedData\n .filter((resourcePermissionsNode: any) => resourcePermissionsNode.value === selectedGrantedPermission?.nodeProps?.owner?.resourceId)\n .map((resourcePermissionsNode: any) => resourcePermissionsNode.children).flat()\n\n const previousSelectedPermissionIndex = resourceGrantedPermissions.map((permission: any) => permission.value).indexOf(selectedGrantedPermission.value)\n\n const nextSelectedGrantedPermission = resourceGrantedPermissions\n .find((permissionNode: any, index: any) => permissionNode?.nodeProps?.types.includes(getKeyByEnumValue(SecurityType, type))\n && permissionNode?.value !== selectedGrantedPermission.value\n && (resourceGrantedPermissions.length > previousSelectedPermissionIndex + 1 ? index > previousSelectedPermissionIndex : true))\n if (nextSelectedGrantedPermission?.value) {\n grantedPermissionsTree.select(nextSelectedGrantedPermission.value)\n }\n setSelectedGrantedPermission(nextSelectedGrantedPermission)\n })\n }\n }, [selectedGrantedPermission, resourceApi, type, permissionsGrantedData, grantedPermissions, grantedPermissionsTree])\n\n useEffect(() => {\n if (opened && dataSource) {\n setSelectedAvailablePermission(undefined)\n setSelectedGrantedPermission(undefined)\n setAvailablePermissionsFilter(\"\")\n setGrantedPermissionsFilter(\"\")\n grantedPermissionsTree.collapseAllNodes()\n availablePermissionsTree.collapseAllNodes()\n loadPermissions()\n }\n }, [opened, type, securityId, loadPermissions])\n\n // Não exibir o modal se não houver dataSource\n if (!dataSource) {\n return null;\n }\n\n return (\n <Modal opened={opened} onClose={close} title={`${getI18nextInstance().t(`archbase:${type}`)}: ${name}`} size={\"80%\"} styles={{ root: { overflow: \"hidden\" } }}>\n <ArchbaseSpaceFixed height={\"540px\"}>\n <ArchbaseSpaceFill>\n <Paper withBorder my={20} p={20} style={{ height: 'calc(100% - 40px)', overflow: 'hidden', display: 'flex', flexDirection: 'column' }}>\n <div style={{ flex: 1, display: 'flex', flexDirection: 'row', overflow: 'hidden', minHeight: 0, gap: '8px' }}>\n <div style={{ flex: 9, display: 'flex', flexDirection: 'column', overflow: 'hidden', minHeight: 0 }}>\n <Group mb={20}>\n <Text>{getI18nextInstance().t('archbase:Available')}</Text>\n <TextInput\n size=\"xs\"\n value={availablePermissionsFilter}\n onChange={(event) => setAvailablePermissionsFilter(event.target.value)}\n placeholder={getI18nextInstance().t('archbase:Filter available permissions')}\n />\n </Group>\n <ScrollArea style={{ flex: 1, minHeight: 0 }}>\n <Tree\n data={allPermissionsData}\n selectOnClick={true}\n allowRangeSelection={false}\n tree={availablePermissionsTree}\n renderNode={({ level, node, expanded, hasChildren, selected, elementProps }) => {\n const isGranted = node?.nodeProps?.granted;\n const textColor = isGranted ? \"dimmed\" : undefined;\n const textDecoration = isGranted ? \"line-through\" : undefined;\n\n const handleClick = useCallback((event: any) => {\n setSelectedAvailablePermission(node)\n elementProps.onClick(event)\n }, [node, elementProps.onClick])\n\n return (\n <Group ml={hasChildren ? 0 : 5} gap={5} {...elementProps}\n bg={selected && level === 2 ? selectedColor : \"\"}\n onClick={handleClick}\n >\n {hasChildren && (\n <IconChevronDown\n size={18}\n style={{ transform: expanded ? 'rotate(0deg)' : 'rotate(-90deg)' }}\n />\n )}\n {!hasChildren && (\n <IconBorderCornerSquare\n size={12}\n style={{ transform: 'rotate(-90deg)', marginTop: \"-5px\" }}\n />\n )}\n <Text\n c={textColor}\n td={textDecoration}\n >\n {translateDelimitedString(node.label as string)}\n </Text>\n </Group>\n )\n }\n }\n />\n </ScrollArea>\n </div>\n <div style={{ flex: 2, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Stack gap={5} align=\"center\">\n <Tooltip label={getI18nextInstance().t('archbase:Add')}>\n <ActionIcon onClick={handleAdd} disabled={!selectedAvailablePermission || selectedAvailablePermission?.nodeProps?.granted || !selectedAvailablePermission.nodeProps}>\n <IconArrowRight />\n </ActionIcon>\n </Tooltip>\n <Tooltip label={getI18nextInstance().t('archbase:Remove')}>\n <ActionIcon onClick={handleRemove} disabled={!selectedGrantedPermission || !selectedGrantedPermission?.nodeProps?.permissionId || !selectedGrantedPermission.nodeProps}>\n <IconArrowLeft />\n </ActionIcon>\n </Tooltip>\n </Stack>\n </div>\n <div style={{ flex: 9, display: 'flex', flexDirection: 'column', overflow: 'hidden', minHeight: 0 }}>\n <Group mb={20}>\n <Text>{getI18nextInstance().t('archbase:Granted')}</Text>\n <TextInput\n size=\"xs\"\n value={grantedPermissionsFilter}\n onChange={(event) => setGrantedPermissionsFilter(event.target.value)}\n placeholder={getI18nextInstance().t('archbase:Filter granted permissions')}\n />\n </Group>\n <ScrollArea style={{ flex: 1, minHeight: 0 }}>\n <Tree\n data={permissionsGrantedData}\n selectOnClick={true}\n allowRangeSelection={false}\n tree={grantedPermissionsTree}\n renderNode={({ level, node, expanded, hasChildren, selected, elementProps }) => {\n const handleClick = useCallback((event: any) => {\n setSelectedGrantedPermission(node)\n elementProps.onClick(event)\n }, [node, elementProps.onClick])\n\n return (\n <Group ml={hasChildren ? 0 : 5} gap={5} {...elementProps} bg={selected && level === 2 ? selectedColor : \"\"}\n onClick={handleClick}\n >\n {hasChildren && (\n <IconChevronDown\n size={18}\n style={{ transform: expanded ? 'rotate(0deg)' : 'rotate(-90deg)' }}\n />\n )}\n {!hasChildren && (\n <IconBorderCornerSquare\n size={12}\n style={{ transform: 'rotate(-90deg)', marginTop: \"-5px\" }}\n />\n )}\n <Text>{translateDelimitedString(node.label as string)}</Text>\n {node?.nodeProps?.types?.includes(\"USER\") && <Badge color=\"blue\">{getI18nextInstance().t('archbase:user')}</Badge>}\n {node?.nodeProps?.types?.includes(\"GROUP\") && <Badge color=\"orange\">{getI18nextInstance().t('archbase:group')}</Badge>}\n {node?.nodeProps?.types?.includes(\"PROFILE\") && <Badge color=\"pink\">{getI18nextInstance().t('archbase:profile')}</Badge>}\n </Group>\n )\n }}\n />\n </ScrollArea>\n </div>\n </div>\n </Paper>\n </ArchbaseSpaceFill>\n <ArchbaseSpaceBottom size=\"40px\">\n <Group justify=\"flex-end\">\n <Button onClick={close}>{getI18nextInstance().t(\"archbase:Close\")}</Button>\n </Group>\n </ArchbaseSpaceBottom>\n </ArchbaseSpaceFixed>\n </Modal>\n )\n}\n","/**\n * ArchbaseSecurityView — visão completa de usuários/grupos/permissões.\n * @status stable\n */\nimport { ARCHBASE_IOC_API_TYPE, builder, emit, processDetailErrorMessage, processErrorMessage, useValidationErrors } from '@archbase/core';\nimport { ArchbaseDataSource } from '@archbase/data';\n// import { ArchbaseCountdownProgress } from '@archbase/components'; // Temporarily disabled\nimport {\n\tuseArchbaseRemoteDataSourceV2,\n\tuseArchbaseRemoteServiceApi,\n\tuseArchbaseStore,\n} from '@archbase/data';\nimport { useArchbaseTheme, isBase64Validate, useArchbaseValidator } from '@archbase/core';\nimport { useArchbaseListContext } from '@archbase/components';\nimport { ArchbaseListCustomItemProps } from '@archbase/components';\nimport { ArchbaseDialog, ArchbaseNotifications } from '@archbase/components';\nimport {\n\tActionIcon,\n\tBadge,\n\tButton,\n\tFlex,\n\tGroup,\n\tPaper,\n\tTabs,\n\tText,\n\tTooltip,\n\tuseMantineColorScheme,\n} from '@mantine/core';\nimport { IconEdit, IconPlus, IconShieldCheckered, IconTrashX } from '@tabler/icons-react';\n// Importações da DataGrid\nimport { ArchbaseDataGridColumn } from '@archbase/components';\nimport { ArchbaseDataGrid, ArchbaseDataGridRef, Columns } from '@archbase/components';\nimport { useArchbaseTranslation } from '@archbase/core';\nimport React, { ReactNode, useEffect, useRef, useState } from 'react';\nimport { ArchbaseAccessTokenService } from '@archbase/security';\nimport { ArchbaseGroupService } from '@archbase/security';\nimport { ArchbaseProfileService } from '@archbase/security';\nimport { ArchbaseResourceService } from '@archbase/security';\nimport { ArchbaseUserService } from '@archbase/security';\nimport { GroupModal, GroupModalOptions } from './GroupModal';\nimport { PermissionsSelectorModal } from './PermissionsSelectorModal';\nimport { ProfileModal, ProfileModalOptions } from './ProfileModal';\nimport { AccessTokenDto, GroupDto, ProfileDto, ResourceDto, UserDto } from '@archbase/security';\nimport { SecurityType } from '@archbase/security';\nimport { UserModal, UserModalOptions } from './UserModal';\nimport { IconEye } from '@tabler/icons-react';\n\nexport interface ArchbaseSecurityProps {\n\tbeforeDefaultUserActions?: (row: UserDto) => ReactNode;\n\tafterDefaultUserActions?: (row: UserDto) => ReactNode;\n\tbeforeDefaultProfileActions?: (row: ProfileDto) => ReactNode;\n\tafterDefaultProfileActions?: (row: ProfileDto) => ReactNode;\n\tbeforeDefaultGroupActions?: (row: GroupDto) => ReactNode;\n\tafterDefaultGroupActions?: (row: GroupDto) => ReactNode;\n\tuserActionsColumnWidth?: number;\n\tprofileActionsColumnWidth?: number;\n\tgroupActionsColumnWidth?: number;\n}\n\ninterface ArchbaseSecurityManagerProps {\n\theight?: any;\n\twidth?: any;\n\tdataSourceUsers?: ArchbaseDataSource<UserDto, string>;\n\tcreateEntitiesWithId?: boolean;\n\tuserModalOptions?: UserModalOptions;\n\tgroupModalOptions?: GroupModalOptions;\n\tprofileModalOptions?: ProfileModalOptions;\n\toptions?: ArchbaseSecurityProps;\n}\n\nexport const NO_USER =\n\t'data:image/png;base64,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';\n\nconst renderGroups = (user: UserDto) => {\n\tif (!user.groups) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<div style={{ display: 'flex' }}>\n\t\t\t{user.groups\n\t\t\t\t.slice()\n\t\t\t\t.sort((a, b) => (a.group?.name ?? '').localeCompare(b.group?.name ?? ''))\n\t\t\t\t.map((item, index) => (\n\t\t\t\t\t<div key={index} style={{ paddingRight: '2px' }}>\n\t\t\t\t\t\t<Badge color=\"blue\">{item.group?.name}</Badge>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t</div>\n\t);\n};\n\nconst renderProfile = (user: UserDto) => {\n\tif (!user.profile) {\n\t\treturn null;\n\t}\n\treturn <Badge color=\"green\">{user.profile?.name}</Badge>;\n};\n\nexport interface UserItemProps extends ArchbaseListCustomItemProps<UserDto, string> {}\n\nexport const UserItem = (props: UserItemProps) => {\n\tconst theme = useArchbaseTheme();\n\tconst listContextValue = useArchbaseListContext<UserDto, string>();\n\tconst itemRef = useRef<any>(null);\n\n\tconst handleClick = (event) => {\n\t\tevent.preventDefault();\n\t\tif (!props.disabled) {\n\t\t\tif (listContextValue.handleSelectItem) {\n\t\t\t\tlistContextValue.handleSelectItem(props.index, props.recordData!);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst avatar =\n\t\tprops.recordData && props.recordData.avatar && isBase64Validate(props.recordData.avatar)\n\t\t\t? atob(props.recordData.avatar)\n\t\t\t: NO_USER;\n\tconst backgroundColor = props.active ? listContextValue.activeBackgroundColor : '';\n\tconst color = props.active ? listContextValue.activeColor : '';\n\n\treturn (\n\t\t<div\n\t\t\tonClick={handleClick}\n\t\t\tstyle={{\n\t\t\t\tpadding: '8px',\n\t\t\t\tbackgroundColor,\n\t\t\t\tcolor,\n\t\t\t\tcursor: props.disabled ? 'not-allowed' : 'pointer',\n\t\t\t}}\n\t\t\tref={itemRef}\n\t\t\ttabIndex={-1}\n\t\t>\n\t\t\t<Group wrap=\"nowrap\">\n\t\t\t\t<img\n\t\t\t\t\tstyle={{ width: '48px', borderRadius: 50 }}\n\t\t\t\t\tsrc={avatar}\n\t\t\t\t\talt={props.recordData ? props.recordData.userName : ''}\n\t\t\t\t/>\n\t\t\t\t<div>\n\t\t\t\t\t<Text size=\"sm\">{props.recordData.name}</Text>\n\t\t\t\t\t<Text size=\"xs\" opacity={0.65}>\n\t\t\t\t\t\t{props.recordData.email}\n\t\t\t\t\t</Text>\n\t\t\t\t</div>\n\t\t\t</Group>\n\t\t</div>\n\t);\n};\n\nexport function ArchbaseSecurityView({\n\theight = '400px',\n\twidth = '100%',\n\tcreateEntitiesWithId = true,\n\tuserModalOptions,\n\tprofileModalOptions,\n\tgroupModalOptions,\n\toptions,\n}: ArchbaseSecurityManagerProps) {\n\tconst theme = useArchbaseTheme();\n\tconst templateStore = useArchbaseStore('securityStore');\n\tconst validator = useArchbaseValidator();\n\tconst { colorScheme } = useMantineColorScheme();\n\tconst [error, setError] = useState<string | undefined>(undefined);\n\tconst [activeTab, setActiveTab] = useState<string | null>('users');\n\tconst userApi = useArchbaseRemoteServiceApi<ArchbaseUserService>(ARCHBASE_IOC_API_TYPE.User);\n\tconst groupApi = useArchbaseRemoteServiceApi<ArchbaseGroupService>(ARCHBASE_IOC_API_TYPE.Group);\n\tconst resourceApi = useArchbaseRemoteServiceApi<ArchbaseResourceService>(ARCHBASE_IOC_API_TYPE.Resource);\n\tconst profileApi = useArchbaseRemoteServiceApi<ArchbaseProfileService>(ARCHBASE_IOC_API_TYPE.Profile);\n\tconst [openedModal, setOpenedModal] = useState<string>('');\n\tconst [openedPermissionsModal, setOpenedPermissionsModal] = useState<string>('');\n\tconst accessTokenApi = useArchbaseRemoteServiceApi<ArchbaseAccessTokenService>(ARCHBASE_IOC_API_TYPE.AccessToken);\n\tconst {t} = useArchbaseTranslation();\n\n\t// Referências para os grids\n\tconst usersGridRef = useRef<ArchbaseDataGridRef | null>(null);\n\tconst groupsGridRef = useRef<ArchbaseDataGridRef | null>(null);\n\tconst profilesGridRef = useRef<ArchbaseDataGridRef | null>(null);\n\tconst resourcesGridRef = useRef<ArchbaseDataGridRef | null>(null);\n\tconst accessTokensGridRef = useRef<ArchbaseDataGridRef | null>(null);\n\n\t// Função para obter o ID da linha\n\tconst getUserRowId = (row: UserDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst getGroupRowId = (row: GroupDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst getProfileRowId = (row: ProfileDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst getResourceRowId = (row: ResourceDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst getAccessTokenRowId = (row: AccessTokenDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst {\n\t\tdataSource: dsAccessTokens,\n\t\tisLoading: isLoadingAccessTokens,\n\t\trefreshData: refreshAccessTokens\n\t} = useArchbaseRemoteDataSourceV2<AccessTokenDto>({\n\t\tname: 'accessTokenApi',\n\t\tservice: accessTokenApi,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tdefaultSortFields: ['user.email', 'expirationTime:desc'],\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst {\n\t\tdataSource: dsUsers,\n\t\tisLoading: isLoadingUsers,\n\t\trefreshData: refreshUsers\n\t} = useArchbaseRemoteDataSourceV2<UserDto>({\n\t\tname: 'dsUsers',\n\t\tservice: userApi,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst {\n\t\tdataSource: dsGroups,\n\t\tisLoading: isLoadingGroups,\n\t\trefreshData: refreshGroups\n\t} = useArchbaseRemoteDataSourceV2<GroupDto>({\n\t\tname: 'dsGroups',\n\t\tservice: groupApi,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst {\n\t\tdataSource: dsProfiles,\n\t\tisLoading: isLoadingProfiles,\n\t\trefreshData: refreshProfiles\n\t} = useArchbaseRemoteDataSourceV2<ProfileDto>({\n\t\tname: 'dsProfile',\n\t\tservice: profileApi,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst {\n\t\tdataSource: dsResources,\n\t\tisLoading: isLoadingResources,\n\t\trefreshData: refreshResources\n\t} = useArchbaseRemoteDataSourceV2<ResourceDto>({\n\t\tname: 'dsResources',\n\t\tservice: resourceApi,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\t// Carregar dados iniciais\n\tuseEffect(() => {\n\t\t// AccessTokens with filter\n\t\trefreshAccessTokens({ filter: emit(builder.eq('revoked', 'false')) });\n\t\t// Other data sources\n\t\trefreshUsers();\n\t\trefreshGroups();\n\t\trefreshProfiles();\n\t\trefreshResources();\n\t}, []);\n\n\tconst accessTokenColumns = (\n\t\t<Columns>\n\t\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\t\tdataField=\"user.avatar\"\n\t\t\t\tdataType=\"image\"\n\t\t\t\tsize={80}\n\t\t\t\theader={`${t('archbase:Foto')}`}\n\t\t\t\trender={(data) => (\n\t\t\t\t\t<img\n\t\t\t\t\t\tstyle={{ borderRadius: 50, height: '32px', maxHeight: '32px' }}\n\t\t\t\t\t\tsrc={data.row.user && data.row.user.avatar ? atob(data.row.user.avatar) : NO_USER}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t\talign=\"center\"\n\t\t\t\texportable={false}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\t\tdataField=\"user.userName\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\tsize={300}\n\t\t\t\theader={`${t('archbase:Nome de Usuário')}`}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\t\tdataField=\"user.email\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader={`${t('archbase:Email')}`}\n\t\t\t\tsize={300}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\t\tdataField=\"expirationDate\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\tsize={300}\n\t\t\t\theader={`${t('archbase:Expira em')}`}\n\t\t\t\trender={(data) => <Text size=\"sm\">{data.row.expirationDate}</Text>}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\t\tdataField=\"revoked\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader={`${t('archbase:Revogado ?')}`}\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\t\tdataField=\"expired\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader={`${t('archbase:Expirado ?')}`}\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\t\tdataField=\"token\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader={`${t('archbase:Token Acesso')}`}\n\t\t\t\tsize={300}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t</Columns>\n\t);\n\n\tconst userColumns = (\n\t\t<Columns>\n\t\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\t\tdataField=\"avatar\"\n\t\t\t\tdataType=\"image\"\n\t\t\t\tsize={80}\n\t\t\t\theader={`${t('archbase:Foto')}`}\n\t\t\t\trender={(data) => (\n\t\t\t\t\t<img\n\t\t\t\t\t\tstyle={{ borderRadius: 50, height: '32px', maxHeight: '32px' }}\n\t\t\t\t\t\tsrc={data.row.avatar ? atob(data.row.avatar) : NO_USER}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\tenableSorting={false}\n\t\t\t\tenableColumnFilter={false}\n\t\t\t\tenableGlobalFilter={false}\n\t\t\t\talign=\"center\"\n\t\t\t\texportable={false}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\t\tdataField=\"name\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\tsize={300}\n\t\t\t\theader={`${t('archbase:Nome')}`}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t\ttruncate={true}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\t\tdataField=\"nickname\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\tsize={120}\n\t\t\t\theader={`${t('archbase:Apelido')}`}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t\ttruncate={true}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\t\tdataField=\"email\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader={`${t('archbase:Email')}`}\n\t\t\t\tsize={300}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t\ttruncate={true}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\t\tdataField=\"accountDeactivated\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader={`${t('archbase:Desativado?')}`}\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t\tsize={120}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\t\tdataField=\"profile.name\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader={`${t('archbase:Perfil')}`}\n\t\t\t\tsize={200}\n\t\t\t\trender={(data) => renderProfile(data.row)}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\t\tdataField=\"groups\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\tsize={300}\n\t\t\t\theader={`${t('archbase:Grupos')}`}\n\t\t\t\trender={(data) => renderGroups(data.row)}\n\t\t\t\texportValue={(row) =>\n\t\t\t\t\trow.groups\n\t\t\t\t\t\t?.slice()\n\t\t\t\t\t\t.sort((a, b) => (a.group?.name ?? '').localeCompare(b.group?.name ?? ''))\n\t\t\t\t\t\t.map((g) => g.group?.name)\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(', ') || ''\n\t\t\t\t}\n\t\t\t\tenableSorting={false}\n\t\t\t\tenableColumnFilter={false}\n\t\t\t\tenableGlobalFilter={false}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\t\tdataField=\"isAdministrator\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader={`${t('archbase:Admin ?')}`}\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\t\tdataField=\"changePasswordOnNextLogin\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader={`${t('archbase:Alt.senha próximo login?')}`}\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t\tsize={120}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\t\tdataField=\"allowPasswordChange\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader={`${t('archbase:Pode alterar senha?')}`}\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t\tsize={120}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\t\tdataField=\"allowMultipleLogins\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader={`${t('archbase:Permite multiplos logins?')}`}\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t\tsize={120}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\t\tdataField=\"passwordNeverExpires\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader={`${t('archbase:Senha nunca expira?')}`}\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t\tsize={120}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\t\tdataField=\"passwordChangedAt\"\n\t\t\t\tdataType=\"datetime\"\n\t\t\t\theader={`${t('archbase:Última troca de senha')}`}\n\t\t\t\tinputFilterType=\"date-range\"\n\t\t\t\tsize={160}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\t\tdataField=\"accountLocked\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader={`${t('archbase:Bloqueado?')}`}\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t\tsize={120}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\t\tdataField=\"unlimitedAccessHours\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader={`${t('archbase:Horário acesso ilimitado?')}`}\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t\tsize={140}\n\t\t\t/>\n\t\t</Columns>\n\t);\n\n\tconst groupColumns = (\n\t\t<Columns>\n\t\t\t<ArchbaseDataGridColumn<GroupDto>\n\t\t\t\tdataField=\"name\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\tsize={300}\n\t\t\t\theader={`${t('archbase:Nome do grupo')}`}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<GroupDto>\n\t\t\t\tdataField=\"description\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader={`${t('archbase:Descrição')}`}\n\t\t\t\tsize={800}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t</Columns>\n\t);\n\n\tconst profileColumns = (\n\t\t<Columns>\n\t\t\t<ArchbaseDataGridColumn<ProfileDto>\n\t\t\t\tdataField=\"name\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\tsize={300}\n\t\t\t\theader={`${t('archbase:Nome do perfil')}`}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ProfileDto>\n\t\t\t\tdataField=\"description\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader={`${t('archbase:Descrição')}`}\n\t\t\t\tsize={800}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t</Columns>\n\t);\n\n\tconst resourceColumns = (\n\t\t<Columns>\n\t\t\t<ArchbaseDataGridColumn<ResourceDto>\n\t\t\t\tdataField=\"name\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\tsize={300}\n\t\t\t\theader={`${t('archbase:Nome do recurso')}`}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ResourceDto>\n\t\t\t\tdataField=\"description\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader={`${t('archbase:Descrição')}`}\n\t\t\t\tsize={800}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t</Columns>\n\t);\n\n\tconst handleAddUserExecute = () => {\n\t\tconst user = UserDto.newInstance();\n\t\tif (!createEntitiesWithId) {\n\t\t\t(user as any).id = undefined;\n\t\t}\n\t\tdsUsers.insert(user);\n\t\tsetOpenedModal(SecurityType.USER);\n\t};\n\n\tconst handleUserEditRow = (row: any) => {\n\t\tif (!dsUsers.isEmpty()) {\n\t\t\tconst currentUser = dsUsers.gotoRecordByData(row);\n\t\t\tif (currentUser) {\n\t\t\t\tdsUsers.edit();\n\t\t\t\tsetOpenedModal(SecurityType.USER);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleUserRemoveRow = (row: any) => {\n\t\tif (!dsUsers.isEmpty()) {\n\t\t\tconst currentUser = dsUsers.gotoRecordByData(row);\n\t\t\tif (currentUser) {\n\t\t\t\tArchbaseDialog.showConfirmDialogYesNo(\n\t\t\t\t\t`${t('archbase:Confirme')}`,\n\t\t\t\t\t`${t('archbase:Deseja remover o usuário ')}${row.name} ?`,\n\t\t\t\t\t() => {\n\t\t\t\t\t\tdsUsers.remove();\n\t\t\t\t\t},\n\t\t\t\t\t() => {},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleUserViewRow = (row: any) => {\n\t\tif (!dsUsers.isEmpty()) {\n\t\t\tconst currentUser = dsUsers.gotoRecordByData(row);\n\t\t\tif (currentUser) {\n\t\t\t\tsetOpenedModal(SecurityType.USER);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst buildUserRowActions = (row: UserDto): ReactNode => {\n\t\treturn (\n\t\t\t<Group gap={1} wrap=\"nowrap\">\n\t\t\t\t{options?.beforeDefaultUserActions?.(row)}\n\t\t\t\t<ActionIcon variant=\"transparent\" onClick={() => handleUserViewRow(row)}>\n\t\t\t\t\t<IconEye size={20} color={colorScheme === 'dark' ? theme.colors.blue[8] : theme.colors.blue[4]} />\n\t\t\t\t</ActionIcon>\n\t\t\t\t<ActionIcon variant=\"transparent\" onClick={() => handleUserEditRow(row)}>\n\t\t\t\t\t<IconEdit size={20} color={colorScheme === 'dark' ? theme.colors.yellow[8] : theme.colors.yellow[4]} />\n\t\t\t\t</ActionIcon>\n\t\t\t\t<ActionIcon variant=\"transparent\" onClick={() => handleUserRemoveRow(row)}>\n\t\t\t\t\t<IconTrashX size={20} color={colorScheme === 'dark' ? theme.colors.red[8] : theme.colors.red[4]} />\n\t\t\t\t</ActionIcon>\n\t\t\t\t<Tooltip withinPortal withArrow position=\"left\" label={`${t('archbase:Edit permissions')}`}>\n\t\t\t\t\t<ActionIcon variant=\"transparent\" onClick={handleOpenUserPermissionsModal}>\n\t\t\t\t\t\t<IconShieldCheckered size={20} color={colorScheme === 'dark' ? theme.colors.green[8] : theme.colors.green[4]} />\n\t\t\t\t\t</ActionIcon>\n\t\t\t\t</Tooltip>\n\t\t\t\t{options?.afterDefaultUserActions?.(row)}\n\t\t\t</Group>\n\t\t);\n\t};\n\n\tconst handleAddGroupExecute = () => {\n\t\tconst group = GroupDto.newInstance();\n\t\tif (!createEntitiesWithId) {\n\t\t\t(group as any).id = undefined;\n\t\t}\n\t\tdsGroups.insert(group);\n\t\tsetOpenedModal(SecurityType.GROUP);\n\t};\n\n\tconst handleGroupEditRow = (row: any) => {\n\t\tif (!dsGroups.isEmpty()) {\n\t\t\tconst currentGroup = dsGroups.gotoRecordByData(row);\n\t\t\tif (currentGroup) {\n\t\t\t\tif (!dsGroups.isEditing()) {\n\t\t\t\t\tdsGroups.edit();\n\t\t\t\t}\n\t\t\t\tsetOpenedModal(SecurityType.GROUP);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleGroupRemoveRow = (row: any) => {\n\t\tif (!dsGroups.isEmpty()) {\n\t\t\tconst currentGroup = dsGroups.gotoRecordByData(row);\n\t\t\tif (currentGroup) {\n\t\t\t\tArchbaseDialog.showConfirmDialogYesNo(\n\t\t\t\t\t`${t('archbase:Confirme')}`,\n\t\t\t\t\t`${t('archbase:Deseja remover o grupo ')}${row.name} ?`,\n\t\t\t\t\t() => {\n\t\t\t\t\t\tdsGroups.remove();\n\t\t\t\t\t},\n\t\t\t\t\t() => {},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleGroupViewRow = (row: any) => {\n\t\tif (!dsGroups.isEmpty()) {\n\t\t\tconst currentGroup = dsGroups.gotoRecordByData(row);\n\t\t\tif (currentGroup) {\n\t\t\t\tsetOpenedModal(SecurityType.GROUP);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst buildGroupRowActions = (row: GroupDto): ReactNode => {\n\t\treturn (\n\t\t\t<Group gap={1} wrap=\"nowrap\">\n\t\t\t\t{options?.beforeDefaultGroupActions?.(row)}\n\t\t\t\t<ActionIcon variant=\"transparent\" onClick={() => handleGroupViewRow(row)}>\n\t\t\t\t\t<IconEye size={20} color={colorScheme === 'dark' ? theme.colors.blue[8] : theme.colors.blue[4]} />\n\t\t\t\t</ActionIcon>\n\t\t\t\t<ActionIcon variant=\"transparent\" onClick={() => handleGroupEditRow(row)}>\n\t\t\t\t\t<IconEdit size={20} color={colorScheme === 'dark' ? theme.colors.yellow[8] : theme.colors.yellow[4]} />\n\t\t\t\t</ActionIcon>\n\t\t\t\t<ActionIcon variant=\"transparent\" onClick={() => handleGroupRemoveRow(row)}>\n\t\t\t\t\t<IconTrashX size={20} color={colorScheme === 'dark' ? theme.colors.red[8] : theme.colors.red[4]} />\n\t\t\t\t</ActionIcon>\n\t\t\t\t<Tooltip withinPortal withArrow position=\"left\" label={`${t('archbase:Edit permissions')}`}>\n\t\t\t\t\t<ActionIcon variant=\"transparent\" onClick={handleOpenGroupPermissionsModal}>\n\t\t\t\t\t\t<IconShieldCheckered size={20} color={colorScheme === 'dark' ? theme.colors.green[8] : theme.colors.green[4]} />\n\t\t\t\t\t</ActionIcon>\n\t\t\t\t</Tooltip>\n\t\t\t\t{options?.afterDefaultGroupActions?.(row)}\n\t\t\t</Group>\n\t\t);\n\t};\n\n\tconst validationContext = useValidationErrors();\n\n\tconst handleSaveUserModal = async () => {\n\t\ttry {\n\t\t\tawait dsUsers.save();\n\t\t} catch (_error) {\n\t\t\treturn;\n\t\t}\n\t\tsetOpenedModal('');\n\t\tvalidationContext?.clearAll();\n\t};\n\n\tconst handleCancelUserModal = () => {\n\t\tsetOpenedModal('');\n\t\tif (!dsUsers.isBrowsing()) {\n\t\t\tdsUsers.cancel();\n\t\t}\n\t\tvalidationContext?.clearAll();\n\t};\n\n\tconst handleSaveGroupModal = async () => {\n\t\ttry {\n\t\t\tawait dsGroups.save();\n\t\t} catch (_error) {\n\t\t\treturn;\n\t\t}\n\t\tsetOpenedModal('');\n\t\tvalidationContext?.clearAll();\n\t};\n\n\tconst handleCancelGroupModal = () => {\n\t\tsetOpenedModal('');\n\t\tif (!dsGroups.isBrowsing()) {\n\t\t\tdsGroups.cancel();\n\t\t}\n\t\tvalidationContext?.clearAll();\n\t};\n\n\tconst handleSaveProfileModal = async () => {\n\t\ttry {\n\t\t\tawait dsProfiles.save();\n\t\t} catch (_error) {\n\t\t\treturn;\n\t\t}\n\t\tsetOpenedModal('');\n\t\tvalidationContext?.clearAll();\n\t};\n\n\tconst handleCancelProfileModal = () => {\n\t\tsetOpenedModal('');\n\t\tif (!dsProfiles.isBrowsing()) {\n\t\t\tdsProfiles.cancel();\n\t\t}\n\t\tvalidationContext?.clearAll();\n\t};\n\n\tconst handleAddProfileExecute = () => {\n\t\tconst profile = ProfileDto.newInstance();\n\t\tif (!createEntitiesWithId) {\n\t\t\t(profile as any).id = undefined;\n\t\t}\n\t\tdsProfiles.insert(profile);\n\t\tsetOpenedModal(SecurityType.PROFILE);\n\t};\n\n\tconst handleProfileEditRow = (row: any) => {\n\t\tif (!dsProfiles.isEmpty()) {\n\t\t\tconst currentProfile = dsProfiles.gotoRecordByData(row);\n\t\t\tif (currentProfile) {\n\t\t\t\tif (!dsProfiles.isEditing()) {\n\t\t\t\t\tdsProfiles.edit();\n\t\t\t\t}\n\t\t\t\tsetOpenedModal(SecurityType.PROFILE);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleProfileRemoveRow = (row: any) => {\n\t\tif (!dsProfiles.isEmpty()) {\n\t\t\tconst currentProfile = dsProfiles.gotoRecordByData(row);\n\t\t\tif (currentProfile) {\n\t\t\t\tArchbaseDialog.showConfirmDialogYesNo(\n\t\t\t\t\t`${t('archbase:Confirme')}`,\n\t\t\t\t\t`${t('archbase:Deseja remover o perfil ')}${row.name} ?`,\n\t\t\t\t\t() => {\n\t\t\t\t\t\tdsProfiles.remove();\n\t\t\t\t\t},\n\t\t\t\t\t() => {},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleProfileViewRow = (row: any) => {\n\t\tif (!dsProfiles.isEmpty()) {\n\t\t\tconst currentProfile = dsProfiles.gotoRecordByData(row);\n\t\t\tif (currentProfile) {\n\t\t\t\tsetOpenedModal(SecurityType.PROFILE);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst buildProfileRowActions = (row: ProfileDto): ReactNode => {\n\t\treturn (\n\t\t\t<Group gap={1} wrap=\"nowrap\">\n\t\t\t\t{options?.beforeDefaultProfileActions?.(row)}\n\t\t\t\t<ActionIcon variant=\"transparent\" onClick={() => handleProfileViewRow(row)}>\n\t\t\t\t\t<IconEye size={20} color={colorScheme === 'dark' ? theme.colors.blue[8] : theme.colors.blue[4]} />\n\t\t\t\t</ActionIcon>\n\t\t\t\t<ActionIcon variant=\"transparent\" onClick={() => handleProfileEditRow(row)}>\n\t\t\t\t\t<IconEdit size={20} color={colorScheme === 'dark' ? theme.colors.yellow[8] : theme.colors.yellow[4]} />\n\t\t\t\t</ActionIcon>\n\t\t\t\t<ActionIcon variant=\"transparent\" onClick={() => handleProfileRemoveRow(row)}>\n\t\t\t\t\t<IconTrashX size={20} color={colorScheme === 'dark' ? theme.colors.red[8] : theme.colors.red[4]} />\n\t\t\t\t</ActionIcon>\n\t\t\t\t<Tooltip withinPortal withArrow position=\"left\" label={`${t('archbase:Edit permissions')}`}>\n\t\t\t\t\t<ActionIcon variant=\"transparent\" onClick={handleOpenProfilePermissionsModal}>\n\t\t\t\t\t\t<IconShieldCheckered size={20} color={colorScheme === 'dark' ? theme.colors.green[8] : theme.colors.green[4]} />\n\t\t\t\t\t</ActionIcon>\n\t\t\t\t</Tooltip>\n\t\t\t\t{options?.afterDefaultProfileActions?.(row)}\n\t\t\t</Group>\n\t\t);\n\t};\n\n\tconst handleAccessTokenRevokeRow = () => {\n\t\tconst currentAccessToken = dsAccessTokens.getCurrentRecord();\n\t\tif (currentAccessToken) {\n\t\t\tArchbaseDialog.showConfirmDialogYesNo(\n\t\t\t\t`${t('archbase:Confirme')}`,\n\t\t\t\t`${t('archbase:Deseja revogar o token de Acesso do usuário ')}${currentAccessToken.user.name} ?`,\n\t\t\t\tasync () => {\n\t\t\t\t\tawait accessTokenApi\n\t\t\t\t\t\t.revoke(currentAccessToken.token)\n\t\t\t\t\t\t.then(async () => {\n\t\t\t\t\t\t\tArchbaseNotifications.showSuccess(\n\t\t\t\t\t\t\t\t`${t('mentors:Informação')}`,\n\t\t\t\t\t\t\t\t`${t('mentors:Token de Acesso revogado com sucesso!')}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tdsAccessTokens.refreshData();\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t\tArchbaseDialog.showErrorWithDetails(\n\t\t\t\t\t\t\t\t`${t('mentors:Atenção')}`,\n\t\t\t\t\t\t\t\tprocessErrorMessage(error),\n\t\t\t\t\t\t\t\tprocessDetailErrorMessage(error),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t() => {},\n\t\t\t);\n\t\t}\n\t};\n\n\tconst handleOpenUserPermissionsModal = () => {\n\t\tsetOpenedPermissionsModal(SecurityType.USER);\n\t};\n\n\tconst handleOpenGroupPermissionsModal = () => {\n\t\tsetOpenedPermissionsModal(SecurityType.GROUP);\n\t};\n\n\tconst handleOpenProfilePermissionsModal = () => {\n\t\tsetOpenedPermissionsModal(SecurityType.PROFILE);\n\t};\n\n\tconst handleClosePermissionsModal = () => {\n\t\tsetOpenedPermissionsModal('');\n\t};\n\n\t// Componentes de ações da barra de ferramentas para cada grid\n\tconst renderUsersToolbarActions = () : ReactNode => {\n\t\treturn (\n\t\t\t<Flex justify={'space-between'} style={{ width: '50%' }}>\n\t\t\t\t<Group align=\"end\" gap={'4px'} wrap=\"nowrap\">\n\t\t\t\t\t<Button color={'green'} leftSection={<IconPlus />} onClick={handleAddUserExecute}>\n\t\t\t\t\t\t{`${t('archbase:New')}`}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button color={'blue'} leftSection={<IconEdit />} onClick={handleOpenUserPermissionsModal}>\n\t\t\t\t\t\t{`${t('archbase:Edit permissions')}`}\n\t\t\t\t\t</Button>\n\t\t\t\t</Group>\n\t\t\t\t<Flex align={'flex-start'} justify={'flex-end'} style={{ width: '200px' }}></Flex>\n\t\t\t</Flex>\n\t\t);\n\t};\n\n\tconst renderGroupsToolbarActions = () : ReactNode => {\n\t\treturn (\n\t\t\t<Flex justify={'space-between'} style={{ width: '50%' }}>\n\t\t\t\t<Group align=\"end\" gap={'4px'} wrap=\"nowrap\">\n\t\t\t\t\t<Button color={'green'} leftSection={<IconPlus />} onClick={handleAddGroupExecute}>\n\t\t\t\t\t\t{`${t('archbase:New')}`}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button color={'blue'} leftSection={<IconEdit />} onClick={handleOpenGroupPermissionsModal}>\n\t\t\t\t\t\t{`${t('archbase:Edit permissions')}`}\n\t\t\t\t\t</Button>\n\t\t\t\t</Group>\n\t\t\t\t<Flex align={'flex-start'} justify={'flex-end'} style={{ width: '200px' }}></Flex>\n\t\t\t</Flex>\n\t\t);\n\t};\n\n\tconst renderProfilesToolbarActions = () : ReactNode => {\n\t\treturn (\n\t\t\t<Flex justify={'space-between'} style={{ width: '50%' }}>\n\t\t\t\t<Group align=\"end\" gap={'4px'} wrap='nowrap'>\n\t\t\t\t\t<Button color={'green'} leftSection={<IconPlus />} onClick={handleAddProfileExecute}>\n\t\t\t\t\t\t{`${t('archbase:New')}`}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button color={'blue'} leftSection={<IconEdit />} onClick={handleOpenProfilePermissionsModal}>\n\t\t\t\t\t\t{`${t('archbase:Edit permissions')}`}\n\t\t\t\t\t</Button>\n\t\t\t\t</Group>\n\t\t\t\t<Flex align={'flex-start'} justify={'flex-end'} style={{ width: '200px' }}></Flex>\n\t\t\t</Flex>\n\t\t);\n\t};\n\n\tconst renderAccessTokensToolbarActions = () : ReactNode => {\n\t\treturn (\n\t\t\t<Flex justify={'space-between'} style={{ width: '50%' }}>\n\t\t\t\t<Group align=\"start\" gap={'4px'} wrap='nowrap'>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tdisabled={!dsAccessTokens.getCurrentRecord()}\n\t\t\t\t\t\tcolor={'red'}\n\t\t\t\t\t\tleftSection={<IconTrashX />}\n\t\t\t\t\t\tonClick={handleAccessTokenRevokeRow}\n\t\t\t\t\t>\n\t\t\t\t\t\t{`${t('archbase:Revoke')}`}\n\t\t\t\t\t</Button>\n\t\t\t\t</Group>\n\t\t\t</Flex>\n\t\t);\n\t};\n\n\treturn (\n\t\t<Paper p=\"md\" style={{ height: height, display: 'flex', flexDirection: 'column' }}>\n\t\t\t<Tabs variant='pills' value={activeTab} onChange={setActiveTab}>\n\t\t\t\t<Tabs.List>\n\t\t\t\t\t<Tabs.Tab value=\"users\">{`${t('Usuários')}`}</Tabs.Tab>\n\t\t\t\t\t<Tabs.Tab value=\"groups\">{`${t('Grupos')}`}</Tabs.Tab>\n\t\t\t\t\t<Tabs.Tab value=\"profiles\">{`${t('Perfis')}`}</Tabs.Tab>\n\t\t\t\t\t<Tabs.Tab value=\"resources\">{`${t('Recursos')}`}</Tabs.Tab>\n\t\t\t\t\t<Tabs.Tab value=\"accessTokens\">{`${t('Tokens Acesso')}`}</Tabs.Tab>\n\t\t\t\t</Tabs.List>\n\t\t\t</Tabs>\n\t\t\t<Paper\n\t\t\t\twithBorder\n\t\t\t\tmt=\"md\"\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: activeTab === 'users' ? 'flex' : 'none',\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\tflex: 1,\n\t\t\t\t\tminHeight: 0,\n\t\t\t\t\toverflow: 'auto'\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ArchbaseDataGrid<UserDto, string>\n\t\t\t\t\tgridRef={usersGridRef}\n\t\t\t\t\tprintTitle={'Usuários'}\n\t\t\t\t\twidth={'100%'}\n\t\t\t\t\theight={'100%'}\n\t\t\t\t\twithBorder={false}\n\t\t\t\t\tdataSource={dsUsers}\n\t\t\t\t\twithColumnBorders={true}\n\t\t\t\t\tstriped={true}\n\t\t\t\t\tenableTopToolbar={true}\n\t\t\t\t\tenableRowActions={true}\n\t\t\t\t\tpageSize={50}\n\t\t\t\t\tisLoading={isLoadingUsers}\n\t\t\t\t\tisError={!!error}\n\t\t\t\t\terror={error}\n\t\t\t\t\tenableGlobalFilter={true}\n\t\t\t\t\tgetRowId={getUserRowId}\n\t\t\t\t\ttoolbarLeftContent={renderUsersToolbarActions()}\n\t\t\t\t\trenderRowActions={buildUserRowActions}\n\t\t\t\t\tactionsColumnWidth={options?.userActionsColumnWidth}\n\t\t\t\t\tchildren={userColumns}\n\t\t\t\t/>\n\t\t\t</Paper>\n\t\t\t<Paper\n\t\t\t\twithBorder\n\t\t\t\tmt=\"md\"\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: activeTab === 'groups' ? 'flex' : 'none',\n\t\t\t\t\tflex: 1,\n\t\t\t\t\tminHeight: 0,\n\t\t\t\t\toverflow: 'auto'\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ArchbaseDataGrid<GroupDto, string>\n\t\t\t\t\tgridRef={groupsGridRef}\n\t\t\t\t\tprintTitle={'Grupos'}\n\t\t\t\t\twidth={'100%'}\n\t\t\t\t\theight={'100%'}\n\t\t\t\t\twithBorder={false}\n\t\t\t\t\tdataSource={dsGroups}\n\t\t\t\t\twithColumnBorders={true}\n\t\t\t\t\tstriped={false}\n\t\t\t\t\tenableTopToolbar={true}\n\t\t\t\t\tenableRowActions={true}\n\t\t\t\t\tpageSize={50}\n\t\t\t\t\tisLoading={isLoadingGroups}\n\t\t\t\t\tisError={!!error}\n\t\t\t\t\terror={error}\n\t\t\t\t\tenableGlobalFilter={true}\n\t\t\t\t\tgetRowId={getGroupRowId}\n\t\t\t\t\trenderRowActions={buildGroupRowActions}\n\t\t\t\t\tactionsColumnWidth={options?.groupActionsColumnWidth}\n\t\t\t\t\tchildren={groupColumns}\n\t\t\t\t\ttoolbarLeftContent={renderGroupsToolbarActions()}\n\t\t\t\t/>\n\t\t\t</Paper>\n\t\t\t<Paper\n\t\t\t\twithBorder\n\t\t\t\tmt=\"md\"\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: activeTab === 'profiles' ? 'flex' : 'none',\n\t\t\t\t\tflex: 1,\n\t\t\t\t\tminHeight: 0,\n\t\t\t\t\toverflow: 'auto'\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ArchbaseDataGrid<ProfileDto, string>\n\t\t\t\t\tgridRef={profilesGridRef}\n\t\t\t\t\tprintTitle={'Perfis'}\n\t\t\t\t\twidth={'100%'}\n\t\t\t\t\theight={'100%'}\n\t\t\t\t\twithBorder={false}\n\t\t\t\t\tdataSource={dsProfiles}\n\t\t\t\t\twithColumnBorders={true}\n\t\t\t\t\tstriped={false}\n\t\t\t\t\tenableTopToolbar={true}\n\t\t\t\t\tenableRowActions={true}\n\t\t\t\t\tpageSize={50}\n\t\t\t\t\tisLoading={isLoadingProfiles}\n\t\t\t\t\tisError={!!error}\n\t\t\t\t\terror={error}\n\t\t\t\t\tenableGlobalFilter={true}\n\t\t\t\t\tgetRowId={getProfileRowId}\n\t\t\t\t\ttoolbarLeftContent={renderProfilesToolbarActions()}\n\t\t\t\t\trenderRowActions={buildProfileRowActions}\n\t\t\t\t\tactionsColumnWidth={options?.profileActionsColumnWidth}\n\t\t\t\t\tchildren={profileColumns}\n\t\t\t\t/>\n\t\t\t</Paper>\n\t\t\t<Paper\n\t\t\t\twithBorder\n\t\t\t\tmt=\"md\"\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: activeTab === 'resources' ? 'flex' : 'none',\n\t\t\t\t\tflex: 1,\n\t\t\t\t\tminHeight: 0,\n\t\t\t\t\toverflow: 'auto'\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ArchbaseDataGrid<ResourceDto, string>\n\t\t\t\t\tgridRef={resourcesGridRef}\n\t\t\t\t\tprintTitle={'Recursos'}\n\t\t\t\t\twidth={'100%'}\n\t\t\t\t\theight={'100%'}\n\t\t\t\t\twithBorder={false}\n\t\t\t\t\tdataSource={dsResources}\n\t\t\t\t\twithColumnBorders={true}\n\t\t\t\t\tstriped={false}\n\t\t\t\t\tenableTopToolbar={true}\n\t\t\t\t\tenableRowActions={false}\n\t\t\t\t\tpageSize={50}\n\t\t\t\t\tisLoading={isLoadingResources}\n\t\t\t\t\tisError={!!error}\n\t\t\t\t\terror={error}\n\t\t\t\t\tenableGlobalFilter={true}\n\t\t\t\t\tgetRowId={getResourceRowId}\n\t\t\t\t\tchildren={resourceColumns}\n\t\t\t\t/>\n\t\t\t</Paper>\n\t\t\t<Paper\n\t\t\t\twithBorder\n\t\t\t\tmt=\"md\"\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: activeTab === 'accessTokens' ? 'flex' : 'none',\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\tflex: 1,\n\t\t\t\t\tminHeight: 0,\n\t\t\t\t\toverflow: 'auto'\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ArchbaseDataGrid<AccessTokenDto, string>\n\t\t\t\t\tgridRef={accessTokensGridRef}\n\t\t\t\t\tprintTitle={'Tokens de API'}\n\t\t\t\t\twidth={'100%'}\n\t\t\t\t\theight={'100%'}\n\t\t\t\t\twithBorder={false}\n\t\t\t\t\tdataSource={dsAccessTokens}\n\t\t\t\t\twithColumnBorders={true}\n\t\t\t\t\tstriped={true}\n\t\t\t\t\tenableTopToolbar={true}\n\t\t\t\t\tenableRowActions={false}\n\t\t\t\t\tpageSize={50}\n\t\t\t\t\tisLoading={isLoadingAccessTokens}\n\t\t\t\t\tisError={!!error}\n\t\t\t\t\terror={error}\n\t\t\t\t\tenableGlobalFilter={true}\n\t\t\t\t\tgetRowId={getAccessTokenRowId}\n\t\t\t\t\ttoolbarLeftContent={renderAccessTokensToolbarActions()}\n\t\t\t\t\tchildren={accessTokenColumns}\n\t\t\t\t/>\n\t\t\t</Paper>\n\t\t\t{openedModal === SecurityType.USER ? (\n\t\t\t\t<UserModal\n\t\t\t\t\tonClickOk={handleSaveUserModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dsUsers}\n\t\t\t\t\tonClickCancel={handleCancelUserModal}\n\t\t\t\t\toptions={userModalOptions}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{openedModal === SecurityType.GROUP ? (\n\t\t\t\t<GroupModal\n\t\t\t\t\tonClickOk={handleSaveGroupModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dsGroups}\n\t\t\t\t\tonClickCancel={handleCancelGroupModal}\n\t\t\t\t\toptions={groupModalOptions}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{openedModal === SecurityType.PROFILE ? (\n\t\t\t\t<ProfileModal\n\t\t\t\t\tonClickOk={handleSaveProfileModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dsProfiles}\n\t\t\t\t\tonClickCancel={handleCancelProfileModal}\n\t\t\t\t\toptions={profileModalOptions}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{openedPermissionsModal === SecurityType.USER?\n\t\t\t<PermissionsSelectorModal\n\t\t\t\tdataSource={dsUsers}\n\t\t\t\topened={!!openedPermissionsModal}\n\t\t\t\tclose={handleClosePermissionsModal}\n\t\t\t/>:null}\n\t\t\t{openedPermissionsModal === SecurityType.GROUP?\n\t\t\t<PermissionsSelectorModal\n\t\t\t\tdataSource={dsGroups}\n\t\t\t\topened={!!openedPermissionsModal}\n\t\t\t\tclose={handleClosePermissionsModal}\n\t\t\t/>:null}\n\t\t\t{openedPermissionsModal === SecurityType.PROFILE?\n\t\t\t<PermissionsSelectorModal\n\t\t\t\tdataSource={dsProfiles}\n\t\t\t\topened={!!openedPermissionsModal}\n\t\t\t\tclose={handleClosePermissionsModal}\n\t\t\t/>:null}\n\n\t\t</Paper>\n\t);\n}\n","/**\n * ArchbaseApiTokenView — listagem e gestão de tokens de API.\n * @status stable\n */\nimport { ARCHBASE_IOC_API_TYPE, getI18nextInstance, getNestedObjectValue, processDetailErrorMessage, processErrorMessage } from '@archbase/core';\nimport {\n\tuseArchbaseDataSource,\n\tuseArchbaseRemoteDataSource,\n\tuseArchbaseRemoteServiceApi,\n\tuseArchbaseStore,\n} from '@archbase/data';\nimport { useArchbaseTheme } from '@archbase/core';\nimport { useArchbaseV1V2Compatibility } from '@archbase/data';\nimport { ArchbaseDialog, ArchbaseNotifications } from '@archbase/components';\nimport {\n\tButton,\n\tText,\n\tFlex,\n\tGroup,\n\tPaper,\n\tuseMantineColorScheme,\n\tRingProgress,\n\tTooltip,\n\tBadge,\n} from '@mantine/core';\nimport {\n\tIconPlus,\n\tIconTrashX,\n} from '@tabler/icons-react';\nimport { useArchbaseTranslation } from '@archbase/core';\nimport { useRef, useState } from 'react';\nimport { ApiTokenModal } from './ApiTokenModal';\nimport { ArchbaseApiTokenService } from '@archbase/security';\nimport { NO_USER } from './ArchbaseSecurityView';\nimport { ApiTokenDto } from '@archbase/security';\nimport { ArchbaseDataGridColumn } from '@archbase/components';\nimport { ArchbaseDataGrid, ArchbaseDataGridRef, Columns } from '@archbase/components';\n// import { ArchbaseGridTemplateRef } from '@archbase/template'; // Removed to break circular dependency\n\n\ninterface ArchbaseApiTokenViewProps {\n\theight?: any;\n\twidth?: any;\n}\n\nexport function ArchbaseApiTokenView({ height = '400px', width = '100%' }: ArchbaseApiTokenViewProps) {\n\tconst theme = useArchbaseTheme();\n\tconst templateStore = useArchbaseStore('apiTokenStore');\n\tconst validator = { validateEntity: () => [] }; // Mock validator returning empty error array\n\tconst { colorScheme } = useMantineColorScheme();\n\tconst [error, setError] = useState<string | undefined>(undefined);\n\tconst apiTokenApi = useArchbaseRemoteServiceApi<ArchbaseApiTokenService>(ARCHBASE_IOC_API_TYPE.ApiToken);\n\tconst [openedModal, setOpenedModal] = useState<string>('');\n\tconst gridRef = useRef<ArchbaseDataGridRef | null>(null)\n \n\t// Função para obter o ID da linha\n\tconst getRowId = (row: ApiTokenDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst { dataSource } = useArchbaseDataSource<ApiTokenDto, string>({\n\t\tinitialData: [],\n\t\tname: 'dataSource',\n\t});\n\n\t// 🔄 MIGRAÇÃO V1/V2: Hooks de compatibilidade para DataSources\n\tconst localDataSourceV1V2 = useArchbaseV1V2Compatibility<ApiTokenDto>(\n\t\t'ArchbaseApiTokenView-LocalDataSource',\n\t\tdataSource,\n\t\tundefined,\n\t\tundefined\n\t);\n\n\tconst { dataSource: dsApiTokens, isLoading } = useArchbaseRemoteDataSource<ApiTokenDto, string>({\n\t\tname: 'dsApiToken',\n\t\tservice: apiTokenApi,\n\t\tstore: templateStore,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tloadOnStart: true,\n\t\tonLoadComplete: (dataSource) => {\n\t\t\t//\n\t\t},\n\t\tonDestroy: (dataSource) => {\n\t\t\t//\n\t\t},\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(getI18nextInstance().t('archbase:WARNING'), error, origin);\n\t\t},\n\t});\n\n\t// 🔄 MIGRAÇÃO V1/V2: Hook de compatibilidade para DataSource remoto\n\tconst remoteDataSourceV1V2 = useArchbaseV1V2Compatibility<ApiTokenDto>(\n\t\t'ArchbaseApiTokenView-RemoteDataSource',\n\t\tdsApiTokens,\n\t\tundefined,\n\t\tundefined\n\t);\n\n\tconst heightTab = `calc(${height} - 40px)`;\n\n\tconst columns = (\n\t\t<Columns>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"user.avatar\"\n\t\t\t\tdataType=\"image\"\n\t\t\t\tsize={80}\n\t\t\t\theader=\"Foto\"\n\t\t\t\trender={(data) => (\n\t\t\t\t\t<img\n\t\t\t\t\t\tstyle={{ borderRadius: 50, height: '32px', maxHeight: '32px' }}\n\t\t\t\t\t\tsrc={\n\t\t\t\t\t\t\tdata.row.user && data.row.user.avatar ? atob(data.row.user.avatar) : NO_USER\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t\talign=\"center\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"user.userName\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\tsize={300}\n\t\t\t\theader=\"Nome de Usuário\"\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"user.email\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Email\"\n\t\t\t\tsize={240}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"name\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Nome\"\n\t\t\t\tsize={240}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"description\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Descrição\"\n\t\t\t\tsize={300}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"token\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Token API\"\n\t\t\t\tsize={300}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t\tenableClickToCopy={true}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"tenantId\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Tenant ID\"\n\t\t\t\tsize={300}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t\tenableClickToCopy={true}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"expirationDate\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\tsize={240}\n\t\t\t\theader=\"Validade\"\n\t\t\t\trender={(data) => {\n\t\t\t\t\tif (!data.row.expirationDate) {\n\t\t\t\t\t\treturn <Text c=\"dimmed\">Sem expiração</Text>;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst today = new Date();\n\t\t\t\t\ttoday.setHours(0, 0, 0, 0);\n\t\t\t\t\tconst expDate = new Date(data.row.expirationDate);\n\t\t\t\t\texpDate.setHours(0, 0, 0, 0);\n\n\t\t\t\t\tconst diffTime = expDate.getTime() - today.getTime();\n\t\t\t\t\tconst diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n\t\t\t\t\t// Calcular porcentagem para o gauge (baseado em 365 dias)\n\t\t\t\t\tconst maxDays = 365;\n\t\t\t\t\tlet percentage = Math.max(0, Math.min(100, (diffDays / maxDays) * 100));\n\n\t\t\t\t\t// Determinar cor baseado nos dias restantes\n\t\t\t\t\tlet color = 'green';\n\t\t\t\t\tlet label = '';\n\n\t\t\t\t\tif (diffDays < 0) {\n\t\t\t\t\t\t// Token vencido\n\t\t\t\t\t\tcolor = 'red';\n\t\t\t\t\t\tpercentage = 100;\n\t\t\t\t\t\tlabel = `Vencido há ${Math.abs(diffDays)} dia${Math.abs(diffDays) !== 1 ? 's' : ''}`;\n\t\t\t\t\t} else if (diffDays === 0) {\n\t\t\t\t\t\tcolor = 'red';\n\t\t\t\t\t\tpercentage = 5;\n\t\t\t\t\t\tlabel = 'Vence hoje';\n\t\t\t\t\t} else if (diffDays <= 7) {\n\t\t\t\t\t\tcolor = 'red';\n\t\t\t\t\t\tlabel = `${diffDays} dia${diffDays !== 1 ? 's' : ''}`;\n\t\t\t\t\t} else if (diffDays <= 30) {\n\t\t\t\t\t\tcolor = 'orange';\n\t\t\t\t\t\tlabel = `${diffDays} dias`;\n\t\t\t\t\t} else if (diffDays <= 90) {\n\t\t\t\t\t\tcolor = 'yellow';\n\t\t\t\t\t\tlabel = `${diffDays} dias`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcolor = 'green';\n\t\t\t\t\t\tlabel = `${diffDays} dias`;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst tooltipText = diffDays < 0\n\t\t\t\t\t\t? `Vencido em ${expDate.toLocaleDateString()}`\n\t\t\t\t\t\t: `Expira em ${expDate.toLocaleDateString()}`;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Tooltip label={tooltipText} withArrow>\n\t\t\t\t\t\t\t<Group gap=\"xs\" wrap=\"nowrap\">\n\t\t\t\t\t\t\t\t<RingProgress\n\t\t\t\t\t\t\t\t\tsize={36}\n\t\t\t\t\t\t\t\t\tthickness={4}\n\t\t\t\t\t\t\t\t\troundCaps\n\t\t\t\t\t\t\t\t\tsections={[{ value: diffDays < 0 ? 100 : percentage, color }]}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Text size=\"sm\" c={diffDays < 0 ? 'red' : undefined} fw={diffDays <= 7 ? 600 : undefined}>\n\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</Group>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t);\n\t\t\t\t}}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"activated\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader=\"Ativado ?\"\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"revoked\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader=\"Revogado ?\"\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t/>\n\t\t</Columns>\n\t);\n\n\tconst handleCreateApiTokenExecute = () => {\n\t\t// 🔄 MIGRAÇÃO V1/V2: Inserção com compatibilidade\n\t\tdataSource.insert(ApiTokenDto.newInstance());\n\t\t\n\t\t// Se for V1, forçar atualização\n\t\tif (dataSource && !localDataSourceV1V2.isDataSourceV2) {\n\t\t\tlocalDataSourceV1V2.v1State.forceUpdate();\n\t\t}\n\t\t\n\t\tsetOpenedModal('apiToken');\n\t};\n\n\tconst handleApiTokenRevokeRow = () => {\n\t\tif (dsApiTokens.getCurrentRecord()) {\n\t\t\tArchbaseDialog.showConfirmDialogYesNo(\n\t\t\t\t`${getI18nextInstance().t('archbase:Confirme')}`,\n\t\t\t\t`${getI18nextInstance().t('archbase:Deseja revogar o token de API do usuário ')}${dsApiTokens.getCurrentRecord().user.name} ?`,\n\t\t\t\tasync () => {\n\t\t\t\t\tawait apiTokenApi\n\t\t\t\t\t\t.revoke(dsApiTokens.getCurrentRecord().token)\n\t\t\t\t\t\t.then(async () => {\n\t\t\t\t\t\t\tArchbaseNotifications.showSuccess(\n\t\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Informação')}`,\n\t\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Token de API revogado com sucesso!')}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// 🔄 MIGRAÇÃO V1/V2: Refresh com compatibilidade\n\t\t\t\t\t\t\tdsApiTokens.refreshData();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Se for V1, forçar atualização\n\t\t\t\t\t\t\tif (dsApiTokens && !remoteDataSourceV1V2.isDataSourceV2) {\n\t\t\t\t\t\t\t\tremoteDataSourceV1V2.v1State.forceUpdate();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t\tArchbaseDialog.showErrorWithDetails(\n\t\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Atenção')}`,\n\t\t\t\t\t\t\t\tprocessErrorMessage(error),\n\t\t\t\t\t\t\t\tprocessDetailErrorMessage(error),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t() => { },\n\t\t\t);\n\t\t}\n\t};\n\n\tconst handleCloseApiTokenModal = () => {\n\t\tsetOpenedModal('');\n\t};\n\n\tconst handleSaveApiToken = async (record?: ApiTokenDto, callback?: Function) => {\n\t\tconst apiToken: ApiTokenDto | undefined = dataSource.getCurrentRecord();\n\t\tif (apiToken) {\n\t\t\ttry {\n\t\t\t\tdataSource.validate();\n\t\t\t\tif (!apiToken.user || !apiToken.user.email) {\n\t\t\t\t\tArchbaseDialog.showErrorWithDetails(\n\t\t\t\t\t\t`${getI18nextInstance().t('archbase:WARNING')}`,\n\t\t\t\t\t\t`${getI18nextInstance().t('archbase:Selecione um usuário para o token de API')}`,\n\t\t\t\t\t\t'',\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait apiTokenApi\n\t\t\t\t\t.create(apiToken.user.email, apiToken.expirationDate, apiToken.name, apiToken.description)\n\t\t\t\t\t.then(async (response: ApiTokenDto) => {\n\t\t\t\t\t\t// 🔄 MIGRAÇÃO V1/V2: Cancelar e adicionar com compatibilidade\n\t\t\t\t\t\tdataSource.cancel();\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Se for V1, forçar atualização no local DataSource\n\t\t\t\t\t\tif (dataSource && !localDataSourceV1V2.isDataSourceV2) {\n\t\t\t\t\t\t\tlocalDataSourceV1V2.v1State.forceUpdate();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tdsApiTokens.append(response);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Se for V1, forçar atualização no remote DataSource\n\t\t\t\t\t\tif (dsApiTokens && !remoteDataSourceV1V2.isDataSourceV2) {\n\t\t\t\t\t\t\tremoteDataSourceV1V2.v1State.forceUpdate();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tArchbaseNotifications.showSuccess(\n\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Informação')}`,\n\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Token de API gerado com sucesso!')}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tcallback(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tArchbaseDialog.showErrorWithDetails(\n\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Atenção')}`,\n\t\t\t\t\t\t\tprocessErrorMessage(error),\n\t\t\t\t\t\t\tprocessDetailErrorMessage(error),\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t} catch (ex) {\n\t\t\t\tArchbaseDialog.showErrorWithDetails(\n\t\t\t\t\t`${getI18nextInstance().t('mentors:Atenção')}`,\n\t\t\t\t\tprocessErrorMessage(ex),\n\t\t\t\t\tprocessDetailErrorMessage(ex),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t};\n\n\t// Componente de ações da barra de ferramentas\n\tconst renderToolbarActions = () => {\n\t\treturn (\n\t\t\t<Flex justify={'space-between'} style={{ width: '50%' }}>\n\t\t\t\t<Group align=\"start\" gap={'2px'} wrap=\"nowrap\">\n\t\t\t\t\t<Button color={'green'} leftSection={<IconPlus />} onClick={handleCreateApiTokenExecute}>\n\t\t\t\t\t\t{getI18nextInstance().t('archbase:New')}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button disabled={!dsApiTokens.getCurrentRecord()} color={'red'} leftSection={<IconTrashX />} onClick={handleApiTokenRevokeRow}>\n\t\t\t\t\t\t{getI18nextInstance().t('archbase:Revoke')}\n\t\t\t\t\t</Button>\n\t\t\t\t</Group>\n\t\t\t</Flex>\n\t\t);\n\t};\n\n\treturn (\n\t\t<Paper p=\"md\" style={{ height: height, display: 'flex', flexDirection: 'column' }}>\n\t\t\t<Paper\n\t\t\t\twithBorder\n\t\t\t\tstyle={{\n\t\t\t\t\theight: heightTab,\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\tflex: 1,\n\t\t\t\t\tminHeight: 0,\n\t\t\t\t\toverflow: 'auto'\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ArchbaseDataGrid<ApiTokenDto, string>\n\t\t\t\t\tgridRef={gridRef}\n\t\t\t\t\tprintTitle={'Tokens de API'}\n\t\t\t\t\twidth={'100%'}\n\t\t\t\t\theight={'100%'}\n\t\t\t\t\twithBorder={false}\n\t\t\t\t\tdataSource={dsApiTokens}\n\t\t\t\t\twithColumnBorders={true}\n\t\t\t\t\tstriped={true}\n\t\t\t\t\tenableTopToolbar={true}\n\t\t\t\t\tenableRowActions={false}\n\t\t\t\t\tpageSize={50}\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\tisError={!!error}\n\t\t\t\t\terror={error}\n\t\t\t\t\tenableGlobalFilter={true}\n\t\t\t\t\tgetRowId={getRowId}\n\t\t\t\t\ttoolbarLeftContent={renderToolbarActions()}\n\t\t\t\t\tchildren={columns}\n\t\t\t\t/>\n\t\t\t</Paper>\n\t\t\t{openedModal === 'apiToken' ? (\n\t\t\t\t<ApiTokenModal\n\t\t\t\t\tonClickOk={handleCloseApiTokenModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dataSource}\n\t\t\t\t\tonCustomSave={handleSaveApiToken}\n\t\t\t\t\tonClickCancel={handleCloseApiTokenModal}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</Paper>\n\t);\n}\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","jsxRuntimeModule","require$$0","ProfileModal","props","options","handleSave","success","handleCancel","jsx","Modal","getI18nextInstance","ScrollArea","jsxs","Stack","Grid","ArchbaseEdit","Group","Button","ArchbaseDualListSelector","availableItemsDS","assignedItemsDS","idFieldAvailable","labelFieldAvailable","idFieldAssigned","labelFieldAssigned","handleCreateAssociationObject","width","height","titleAvailable","titleAssigned","useArchbaseV1V2Compatibility","assignedV1V2","availableItems","setAvailableItems","useState","assignedItems","setAssignedItems","selectedAvailable","setSelectedAvailable","selectedAssigned","setSelectedAssigned","loadItemsData","useCallback","useArchbaseDataSourceListener","useEffect","getItemId","item","field","getItemLabel","handleSelect","setId","id","prev","handleAdd","originalItem","newItem","handleRemove","record","criteria","Paper","Box","Text","List","Checkbox","g","Tooltip","ActionIcon","IconArrowRight","IconArrowLeft","RenderProfileUserItem","forwardRef","image","label","description","origin","others","ref","Flex","Space","defaultUserModalOptions","UserModal","passwordError","setPasswordError","rawPasswordChangedAt","parsedPasswordChangedAt","passwordChangedAt","basePasswordPolicy","resolveArchbasePasswordPolicy","personalTerms","term","passwordPolicy","groupApi","useArchbaseRemoteServiceApi","ARCHBASE_IOC_API_TYPE","dsGroups","useArchbaseRemoteDataSource","error","ArchbaseNotifications","profileApi","dsProfiles","setDefaultValues","filter","emit","builder","result","group","UserGroupDto","currentRecord","validateArchbasePassword","value","ArchbasePasswordEdit","ArchbaseSelect","option","Input","ArchbaseCheckbox","ArchbaseAvatarEdit","ArchbaseDataSource","Fragment","GroupModal","UserSelectItem","ApiTokenModal","useFocusTrap","setValue","userApi","v1v2Compatibility","handleChange","dateValue","isoString","convertDateToISOString","loadRemoteUsers","page","resolve","reject","processErrorMessage","DateTimePicker","ArchbaseAsyncSelect","translateDelimitedString","inputString","delimiter","part","PermissionsSelectorModal","dataSource","opened","close","name","useMemo","securityId","availablePermissionsTree","useTree","grantedPermissionsTree","availablePermissions","setAvailablePermissions","grantedPermissions","setGrantedPermissions","selectedAvailablePermission","setSelectedAvailablePermission","selectedGrantedPermission","setSelectedGrantedPermission","availablePermissionsFilter","setAvailablePermissionsFilter","debouncedAvailablePermissionsFilter","useDebouncedValue","grantedPermissionsFilter","setGrantedPermissionsFilter","debouncedGrantedPermissionsFilter","resourceApi","colorScheme","useMantineColorScheme","selectedColor","permissionsGrantedData","a","b","resourcePermissions","permission","grantedPermissionsActionIds","allPermissionsData","permissionGranted","resourcePermissionsGranted","getKeyByEnumValue","SecurityType","loadPermissions","permissionsGranted","allPermissions","resouceActionPermissionDto","updatedPermissionsGranted","resourceAvailablePermissions","resourcePermissionsNode","previousSelectedPermissionIndex","nextSelectedAvailablePermission","permissionNode","index","hasOnePermissionOnResource","resource","currentType","resourceGrantedPermissions","nextSelectedGrantedPermission","ArchbaseSpaceFixed","ArchbaseSpaceFill","TextInput","event","Tree","level","node","expanded","hasChildren","selected","elementProps","isGranted","textColor","textDecoration","handleClick","IconChevronDown","IconBorderCornerSquare","Badge","ArchbaseSpaceBottom","NO_USER","renderGroups","user","renderProfile","ArchbaseSecurityView","createEntitiesWithId","userModalOptions","profileModalOptions","groupModalOptions","theme","useArchbaseTheme","useArchbaseStore","validator","useArchbaseValidator","setError","activeTab","setActiveTab","openedModal","setOpenedModal","openedPermissionsModal","setOpenedPermissionsModal","accessTokenApi","t","useArchbaseTranslation","usersGridRef","useRef","groupsGridRef","profilesGridRef","resourcesGridRef","accessTokensGridRef","getUserRowId","row","getGroupRowId","getProfileRowId","getResourceRowId","getAccessTokenRowId","dsAccessTokens","isLoadingAccessTokens","refreshAccessTokens","useArchbaseRemoteDataSourceV2","dsUsers","isLoadingUsers","refreshUsers","isLoadingGroups","refreshGroups","isLoadingProfiles","refreshProfiles","dsResources","isLoadingResources","refreshResources","accessTokenColumns","Columns","ArchbaseDataGridColumn","data","userColumns","groupColumns","profileColumns","resourceColumns","handleAddUserExecute","UserDto","handleUserEditRow","handleUserRemoveRow","ArchbaseDialog","handleUserViewRow","buildUserRowActions","IconEye","IconEdit","IconTrashX","handleOpenUserPermissionsModal","IconShieldCheckered","handleAddGroupExecute","GroupDto","handleGroupEditRow","handleGroupRemoveRow","handleGroupViewRow","buildGroupRowActions","handleOpenGroupPermissionsModal","validationContext","useValidationErrors","handleSaveUserModal","handleCancelUserModal","handleSaveGroupModal","handleCancelGroupModal","handleSaveProfileModal","handleCancelProfileModal","handleAddProfileExecute","profile","ProfileDto","handleProfileEditRow","handleProfileRemoveRow","handleProfileViewRow","buildProfileRowActions","handleOpenProfilePermissionsModal","handleAccessTokenRevokeRow","currentAccessToken","processDetailErrorMessage","handleClosePermissionsModal","renderUsersToolbarActions","IconPlus","renderGroupsToolbarActions","renderProfilesToolbarActions","renderAccessTokensToolbarActions","Tabs","ArchbaseDataGrid","ArchbaseApiTokenView","templateStore","apiTokenApi","gridRef","getRowId","useArchbaseDataSource","localDataSourceV1V2","dsApiTokens","isLoading","remoteDataSourceV1V2","heightTab","columns","today","expDate","diffTime","diffDays","percentage","color","tooltipText","RingProgress","handleCreateApiTokenExecute","ApiTokenDto","handleApiTokenRevokeRow","handleCloseApiTokenModal","handleSaveApiToken","callback","apiToken","response","ex","renderToolbarActions"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/.pnpm/react@19.2.3/node_modules/react/jsx-runtime.js","../src/ProfileModal.tsx","../src/ArchbaseDualListSelector.tsx","../src/RenderProfileUserItem.tsx","../src/UserModal.tsx","../src/GroupModal.tsx","../src/ApiTokenModal.tsx","../src/PermissionsSelectorModal.tsx","../src/securityView/noUserAvatar.ts","../src/securityView/UserItem.tsx","../src/securityView/columns.tsx","../src/securityView/SecurityGridPanel.tsx","../src/securityView/useSecurityEntityActions.ts","../src/securityView/SecurityRowActions.tsx","../src/securityView/SecurityToolbarActions.tsx","../src/ArchbaseSecurityView.tsx","../src/ArchbaseApiTokenView.tsx","../src/securityDiagnostics/DiagnosticPrimitives.tsx","../src/securityDiagnostics/OverviewPanel.tsx","../src/securityDiagnostics/EffectiveAccessPanel.tsx","../src/securityDiagnostics/SimulationPanel.tsx","../src/securityDiagnostics/ArchbaseSecurityDiagnosticsView.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * ProfileModal — modal com dados da conta do usuário.\n * @status stable\n */\nimport React from 'react'\nimport { Grid, ScrollArea, Stack, Modal, Button, Group } from '@mantine/core'\nimport { IArchbaseDataSourceBase } from '@archbase/data'\nimport { getI18nextInstance } from '@archbase/core';\nimport { ProfileDto } from '@archbase/security'\nimport { ArchbaseEdit } from '@archbase/components'\n\nexport interface ProfileModalOptions {\n customContentBefore?: (profile: ProfileDto) => React.ReactNode;\n customContentAfter?: (profile: ProfileDto) => React.ReactNode;\n}\n\nexport interface ProfileModalProps {\n dataSource: IArchbaseDataSourceBase<ProfileDto>\n opened: boolean\n onClickOk: (record?: ProfileDto, result?: any) => void\n onClickCancel: (record?: ProfileDto) => void\n onCustomSave?: (record?: ProfileDto, callback?: Function) => void\n onAfterSave?: (record?: ProfileDto) => void\n options?: ProfileModalOptions\n}\n\nexport const ProfileModal = (props: ProfileModalProps) => {\n const options = {...(props.options ?? {}) }\n \n const handleSave = () => {\n if (props.onCustomSave) {\n props.onCustomSave(props.dataSource.getCurrentRecord()!, (success: boolean) => {\n if (success && props.onAfterSave) {\n props.onAfterSave(props.dataSource.getCurrentRecord()!);\n }\n props.onClickOk(props.dataSource.getCurrentRecord()!, success);\n });\n } else {\n props.onClickOk(props.dataSource.getCurrentRecord()!, true);\n }\n };\n\n const handleCancel = () => {\n props.onClickCancel(props.dataSource.getCurrentRecord()!);\n };\n \n return (\n <Modal\n opened={props.opened}\n onClose={handleCancel}\n title={getI18nextInstance().t('archbase:Perfil')}\n size=\"60%\"\n styles={{content: {maxWidth: 1000}}}\n >\n <ScrollArea style={{ height: '460px' }}>\n <Stack w={\"98%\"}>\n {options?.customContentBefore && options.customContentBefore(props.dataSource.getCurrentRecord()!)}\n <Grid>\n <Grid.Col span={{ base: 12, md: 12, lg: 12 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Nome do perfil')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe o nome do perfil')}`}\n dataSource={props.dataSource}\n dataField=\"name\"\n />\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 12, lg: 12 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Descrição do perfil')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe a descrição do perfil')}`}\n dataSource={props.dataSource}\n dataField=\"description\"\n />\n </Grid.Col>\n </Grid>\n {options?.customContentAfter && options.customContentAfter(props.dataSource.getCurrentRecord()!)}\n \n <Group justify=\"flex-end\" mt=\"md\">\n <Button variant=\"default\" onClick={handleCancel}>\n {getI18nextInstance().t('archbase:Cancelar')}\n </Button>\n <Button onClick={handleSave}>\n {getI18nextInstance().t('archbase:Salvar')}\n </Button>\n </Group>\n </Stack>\n </ScrollArea>\n </Modal>\n )\n}\n","/**\n * ArchbaseDualListSelector — duplo painel para mover itens entre permissões/roles.\n * @status stable\n */\nimport React, { useState, useEffect, useCallback } from 'react'\nimport {\n Button,\n Group,\n Box,\n Text,\n List,\n Checkbox,\n Stack,\n ActionIcon,\n ScrollArea,\n Paper,\n Tooltip\n} from '@mantine/core'\nimport { IconArrowLeft, IconArrowRight } from '@tabler/icons-react'\nimport { ArchbaseDataSource } from '@archbase/data'\nimport { useArchbaseV1V2Compatibility } from '@archbase/data'\nimport { useArchbaseDataSourceListener } from '@archbase/data'\n\n// Definindo props com genéricos para os tipos de item das duas listas\nexport interface ArchbaseDualListSelectorProps<T, U> {\n availableItemsDS: ArchbaseDataSource<T, any>\n assignedItemsDS: ArchbaseDataSource<U, any>\n idFieldAvailable: string | ((item: T) => string)\n labelFieldAvailable: string | ((item: T) => string)\n idFieldAssigned: string | ((item: U) => string)\n labelFieldAssigned: string | ((item: U) => string)\n handleCreateAssociationObject: (item: T) => U\n width?: string\n height?: string\n titleAvailable?: string\n titleAssigned?: string\n}\n\nexport function ArchbaseDualListSelector<T, U>({\n availableItemsDS,\n assignedItemsDS,\n idFieldAvailable,\n labelFieldAvailable,\n idFieldAssigned,\n labelFieldAssigned,\n handleCreateAssociationObject,\n width = '400px',\n height = '200px',\n titleAvailable = 'Disponíveis',\n titleAssigned = 'Selecionados'\n}: ArchbaseDualListSelectorProps<T, U>) {\n // 🔄 MIGRAÇÃO V1/V2: Hooks de compatibilidade para ambos DataSources\n const availableV1V2 = useArchbaseV1V2Compatibility<T[]>(\n 'ArchbaseDualListSelector-Available',\n availableItemsDS,\n undefined,\n []\n );\n\n const assignedV1V2 = useArchbaseV1V2Compatibility<U[]>(\n 'ArchbaseDualListSelector-Assigned', \n assignedItemsDS,\n undefined,\n []\n );\n\n const [availableItems, setAvailableItems] = useState<T[]>([])\n const [assignedItems, setAssignedItems] = useState<U[]>([])\n const [selectedAvailable, setSelectedAvailable] = useState<string[]>([])\n const [selectedAssigned, setSelectedAssigned] = useState<string[]>([])\n\n // 🔄 MIGRAÇÃO V1/V2: Função para carregar dados condicionalmente\n const loadItemsData = useCallback(() => {\n if (availableItemsDS) {\n setAvailableItems(availableItemsDS.browseRecords())\n }\n if (assignedItemsDS) {\n setAssignedItems(assignedItemsDS.browseRecords())\n }\n }, [availableItemsDS, assignedItemsDS]);\n\n // 🔄 MIGRAÇÃO V1/V2: Listeners para ambos DataSources\n useArchbaseDataSourceListener<T, any>({\n dataSource: availableItemsDS,\n listener: () => loadItemsData()\n });\n\n useArchbaseDataSourceListener<U, any>({\n dataSource: assignedItemsDS,\n listener: () => loadItemsData()\n });\n\n useEffect(() => {\n loadItemsData();\n }, [loadItemsData])\n\n const getItemId = (item: any, field: string | ((item: any) => string)): string =>\n typeof field === 'function' ? field(item) : item[field]\n\n const getItemLabel = (item: any, field: string | ((item: any) => string)): string =>\n typeof field === 'function' ? field(item) : item[field]\n\n const handleSelect = (setId: React.Dispatch<React.SetStateAction<string[]>>, id: string) => {\n setId((prev) => (prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id]))\n }\n\n const handleAdd = () => {\n selectedAvailable.forEach((id) => {\n const originalItem = availableItems.find((item) => getItemId(item, idFieldAvailable) === id)\n if (originalItem) {\n const newItem = handleCreateAssociationObject(originalItem)\n \n // 🔄 MIGRAÇÃO V1/V2: Usar operações condicionais baseadas na versão\n if (assignedV1V2.isDataSourceV2) {\n // Para DataSource V2: usar métodos otimizados\n assignedItemsDS.insert(newItem)\n assignedItemsDS.save()\n } else {\n // Para DataSource V1: comportamento original + forceUpdate\n assignedItemsDS.insert(newItem)\n assignedItemsDS.save()\n assignedV1V2.v1State.forceUpdate()\n }\n }\n })\n setSelectedAvailable([])\n }\n\n const handleRemove = () => {\n selectedAssigned.forEach((id) => {\n const record = assignedItems.find((item) => getItemId(item, idFieldAssigned) === id)\n if (record) {\n // Preparando o objeto de critério dinâmico\n const criteria =\n typeof idFieldAssigned === 'function'\n ? { customId: idFieldAssigned(record) }\n : { [idFieldAssigned]: id }\n \n // 🔄 MIGRAÇÃO V1/V2: Usar operações condicionais baseadas na versão\n if (assignedV1V2.isDataSourceV2) {\n // Para DataSource V2: usar métodos otimizados\n assignedItemsDS.remove(() => assignedItemsDS.locate(criteria))\n } else {\n // Para DataSource V1: comportamento original + forceUpdate\n assignedItemsDS.remove(() => assignedItemsDS.locate(criteria))\n assignedV1V2.v1State.forceUpdate()\n }\n }\n })\n setSelectedAssigned([])\n }\n\n return (\n <Paper withBorder style={{ display: 'flex', width, height }}>\n <Box style={{ minWidth: '44%', minHeight: height }}>\n <Text>{titleAvailable}</Text>\n <List\n spacing=\"xs\"\n size=\"sm\"\n center\n listStyleType=\"none\"\n style={{\n margin: '6px',\n overflowY: 'auto',\n overflowX: 'hidden',\n height: 'calc(100% - 32px)'\n }}\n >\n {availableItems.map((item) => (\n <List.Item key={getItemId(item, idFieldAvailable)}>\n <Checkbox\n label={getItemLabel(item, labelFieldAvailable)}\n checked={selectedAvailable.includes(getItemId(item, idFieldAvailable))}\n onChange={() =>\n handleSelect(setSelectedAvailable, getItemId(item, idFieldAvailable))\n }\n disabled={assignedItems.some(\n (g) => getItemId(g, idFieldAssigned) === getItemId(item, idFieldAvailable)\n )}\n />\n </List.Item>\n ))}\n </List>\n </Box>\n <Stack gap={5} style={{ minWidth: '10%' }} justify=\"center\" align=\"center\">\n <Tooltip label=\"Adicionar\">\n <ActionIcon onClick={handleAdd} disabled={!selectedAvailable.length}>\n <IconArrowRight />\n </ActionIcon>\n </Tooltip>\n <Tooltip label=\"Remover\">\n <ActionIcon onClick={handleRemove} disabled={!selectedAssigned.length}>\n <IconArrowLeft />\n </ActionIcon>\n </Tooltip>\n </Stack>\n <Box style={{ minWidth: '44%', minHeight: height }}>\n <Text>{titleAssigned}</Text>\n <List\n spacing=\"xs\"\n size=\"sm\"\n center\n listStyleType=\"none\"\n style={{\n margin: '6px',\n overflowY: 'auto',\n overflowX: 'hidden',\n height: 'calc(100% - 32px)'\n }}\n >\n {assignedItems.map((item) => (\n <List.Item key={getItemId(item, idFieldAssigned)}>\n <Checkbox\n label={getItemLabel(item, labelFieldAssigned)}\n checked={selectedAssigned.includes(getItemId(item, idFieldAssigned))}\n onChange={() => handleSelect(setSelectedAssigned, getItemId(item, idFieldAssigned))}\n />\n </List.Item>\n ))}\n </List>\n </Box>\n </Paper>\n )\n}\n","/**\n * RenderProfileUserItem — item de lista para usuário (usado em modais/profile).\n * @status stable\n */\nimport React from 'react'\nimport { Flex, Space, Text } from '@mantine/core'\nimport { forwardRef } from 'react'\nimport { ProfileDto } from '@archbase/security'\n\nexport interface RenderProfileUserItemProps extends React.ComponentPropsWithoutRef<'div'> {\n image: string\n label: string\n description: string\n origin: ProfileDto\n}\n\nexport const RenderProfileUserItem = forwardRef<HTMLDivElement, RenderProfileUserItemProps>(\n ({ image, label, description, origin, ...others }: RenderProfileUserItemProps, ref) => (\n <div ref={ref} {...others}>\n <Flex>\n <Text size=\"sm\" fw={600}>\n {origin ? origin.name:''}\n </Text>\n <Space w=\"lg\" />\n </Flex>\n </div>\n )\n)\n","/**\n * UserModal — modal de cadastro/edição de usuários com roles e ações.\n * @status stable\n */\nimport { ARCHBASE_IOC_API_TYPE, getI18nextInstance, builder, emit } from '@archbase/core'\nimport type { ArchbasePasswordPolicy } from '@archbase/core'\nimport { resolveArchbasePasswordPolicy, validateArchbasePassword } from '@archbase/core'\nimport { IArchbaseDataSourceBase, ArchbaseDataSource } from '@archbase/data'\nimport { ArchbaseCheckbox, ArchbaseEdit, ArchbaseSelect, ArchbasePasswordEdit, ArchbaseAvatarEdit } from '@archbase/components'\nimport { useArchbaseRemoteDataSource, useArchbaseRemoteServiceApi } from '@archbase/data'\nimport { ArchbaseNotifications } from '@archbase/components'\nimport { Grid, Group, Input, ScrollArea, Space, Stack, Text, Modal, Button } from '@mantine/core'\nimport { useArchbaseTranslation } from '@archbase/core';\nimport React, { useEffect, useState } from 'react'\nimport { ArchbaseDualListSelector } from './ArchbaseDualListSelector'\nimport { ArchbaseGroupService } from '@archbase/security'\nimport { ArchbaseProfileService } from '@archbase/security'\nimport { RenderProfileUserItem } from './RenderProfileUserItem'\nimport { GroupDto, ProfileDto, UserDto, UserGroupDto } from '@archbase/security'\n\nexport interface UserModalOptions {\n // Campos de identificação\n showNickname?: boolean; // nickname - Apelido\n\n // Campos de perfil e grupos\n showProfile?: boolean; // profile - Perfil do usuário\n showGroups?: boolean; // groups - Grupos (DualListSelector)\n\n // Campos de configuração de senha\n showChangePasswordOnNextLogin?: boolean; // changePasswordOnNextLogin\n showAllowPasswordChange?: boolean; // allowPasswordChange\n showPasswordNeverExpires?: boolean; // passwordNeverExpires\n /** Exibe, somente leitura, a data da última troca de senha (passwordChangedAt) */\n showPasswordChangedAt?: boolean;\n /**\n * Critérios de senha forte exigidos no cadastro.\n * `true` aplica a política padrão do Archbase; um objeto permite ajustar cada critério.\n * Quando ausente a senha é apenas obrigatória na inclusão (comportamento original).\n */\n passwordPolicy?: ArchbasePasswordPolicy | boolean;\n /** Indicador se a lista de critérios deve ser exibida abaixo do campo senha. Padrão: true */\n showPasswordRequirements?: boolean;\n /**\n * Inclui login, e-mail e nome do usuário na lista de termos proibidos dentro da senha.\n * Só tem efeito quando `passwordPolicy` está ativa. Padrão: true\n */\n forbidPersonalDataInPassword?: boolean;\n\n // Campos de status da conta\n showAccountConfigLabel?: boolean;\n showAccountDeactivated?: boolean; // accountDeactivated\n showAccountLocked?: boolean; // accountLocked\n showIsAdministrator?: boolean;\n\n // Configurações de campos obrigatórios\n requiredNickname?: boolean;\n\n /** Tamanho máximo da imagem do avatar em kilobytes */\n avatarMaxSizeKB?: number;\n /** Qualidade da compressão da imagem do avatar (0 a 1), sendo 1 melhor qualidade */\n avatarImageQuality?: number;\n /** Maior dimensão (px) do avatar final — a imagem é redimensionada automaticamente. 0 mantém a resolução original */\n avatarMaxOutputSizePx?: number;\n\n /** Configuração de permissão de edição de campos */\n allowEditEmail?: boolean;\n\n customContentBefore?: (user: UserDto) => React.ReactNode;\n\n customContentAfter?: (user: UserDto) => React.ReactNode;\n\n /** Nome do perfil padrão que um novo usuário já virá pré-preenchido */\n userDefaultProfile?: string;\n /** Nome dos grupos padrões que um novo usuário já virá pré-preenchido */\n userDefaultGroups?: string[];\n}\n\nexport const defaultUserModalOptions: UserModalOptions = {\n // Campos de identificação\n showNickname: true,\n\n // Campos de perfil e grupos\n showProfile: true,\n showGroups: true,\n\n // Campos de configuração de senha\n showChangePasswordOnNextLogin: true,\n showAllowPasswordChange: true,\n showPasswordNeverExpires: true,\n showPasswordChangedAt: true,\n showPasswordRequirements: true,\n forbidPersonalDataInPassword: true,\n\n // Campos de status da conta\n showAccountConfigLabel: true,\n showAccountDeactivated: true,\n showAccountLocked: true,\n showIsAdministrator: true,\n\n // Configurações de campos obrigatórios\n requiredNickname: true,\n\n avatarMaxSizeKB: 2000,\n avatarImageQuality: 1,\n avatarMaxOutputSizePx: 512,\n\n allowEditEmail: true,\n}\n\nexport interface UserModalProps {\n dataSource: IArchbaseDataSourceBase<UserDto>\n opened: boolean\n onClickOk: (record?: UserDto, result?: any) => void\n onClickCancel: (record?: UserDto) => void\n onCustomSave?: (record?: UserDto, callback?: Function) => void\n onAfterSave?: (record?: UserDto) => void\n options?: UserModalOptions\n}\n\nexport const UserModal = (props: UserModalProps) => {\n const [passwordError, setPasswordError] = useState(\"\")\n const options = { ...defaultUserModalOptions, ...(props.options ?? {}) }\n\n // Somente leitura: o backend atualiza passwordChangedAt a cada troca de senha.\n const rawPasswordChangedAt = props.dataSource.getFieldValue('passwordChangedAt') as string | undefined\n const parsedPasswordChangedAt = rawPasswordChangedAt ? new Date(rawPasswordChangedAt) : undefined\n const passwordChangedAt =\n parsedPasswordChangedAt && !Number.isNaN(parsedPasswordChangedAt.getTime())\n ? parsedPasswordChangedAt.toLocaleString()\n : undefined\n\n // Política de senha forte: quando ativa, acrescenta os dados pessoais do usuário à blocklist.\n const basePasswordPolicy = resolveArchbasePasswordPolicy(options.passwordPolicy)\n const personalTerms = options.forbidPersonalDataInPassword\n ? (['name', 'nickname', 'email'] as const)\n .map((field) => {\n const term = props.dataSource.getFieldValue(field) as string | undefined\n // Do e-mail interessa apenas a parte local: o domínio é comum a todos os usuários.\n return field === 'email' && term ? term.split('@')[0] : term\n })\n .filter((term): term is string => typeof term === 'string' && term.trim().length >= 3)\n : []\n const passwordPolicy: ArchbasePasswordPolicy | undefined = basePasswordPolicy\n ? {\n ...basePasswordPolicy,\n blocklist: [...(basePasswordPolicy.blocklist ?? []), ...personalTerms],\n }\n : undefined\n\n const groupApi = useArchbaseRemoteServiceApi<ArchbaseGroupService>(ARCHBASE_IOC_API_TYPE.Group)\n const { dataSource: dsGroups } = useArchbaseRemoteDataSource<GroupDto, string>({\n name: `dsGroups`,\n service: groupApi,\n pageSize: 9999,\n loadOnStart: true,\n sort: ['name:asc'],\n onError: (error, origin) => {\n ArchbaseNotifications.showError(getI18nextInstance().t('archbase:WARNING'), error, origin)\n }\n })\n console.log(\"versão 12/05/2026\")\n\n const profileApi = useArchbaseRemoteServiceApi<ArchbaseProfileService>(ARCHBASE_IOC_API_TYPE.Profile)\n const { dataSource: dsProfiles } = useArchbaseRemoteDataSource<ProfileDto, string>({\n name: `dsProfiles`,\n service: profileApi,\n pageSize: 9999,\n loadOnStart: true,\n sort: ['name:asc'],\n onError: (error, origin) => {\n ArchbaseNotifications.showError(getI18nextInstance().t('archbase:WARNING'), error, origin)\n }\n })\n\n useEffect(() => {\n setPasswordError(\"\")\n }, [props.dataSource.getFieldValue(\"password\")])\n\n const setDefaultValues = async () => {\n if (!props.dataSource.isInserting()) return;\n\n if (options.userDefaultProfile) {\n const filter = emit(builder.eq(\"name\", options.userDefaultProfile))\n const result = await profileApi.findAllWithFilter(filter, 0, 1)\n if (result && result.content.length > 0) {\n props.dataSource.setFieldValue(\"profile\", result.content[0])\n }\n }\n if (options.userDefaultGroups) {\n const filter = emit(builder.in(\"name\", options.userDefaultGroups))\n const result = await groupApi.findAllWithFilter(filter, 0, 500)\n if (result && result.content.length > 0) {\n props.dataSource.setFieldValue(\"groups\", result.content.map(group => UserGroupDto.newInstance(group)))\n }\n }\n }\n\n useEffect(() => {\n if (props.opened) {\n setDefaultValues()\n }\n }, [props.opened])\n\n const handleSave = () => {\n const currentRecord = props.dataSource.getCurrentRecord()!;\n if (!currentRecord.password && props.dataSource.isInserting()) {\n setPasswordError(getI18nextInstance().t('archbase:Informe a senha'))\n return;\n }\n\n // Na edição a senha em branco significa \"manter a senha atual\", então não é validada.\n if (passwordPolicy && currentRecord.password) {\n const result = validateArchbasePassword(currentRecord.password, passwordPolicy)\n if (!result.valid) {\n setPasswordError(result.error!)\n return;\n }\n }\n\n if (props.onCustomSave) {\n props.onCustomSave(currentRecord, (success: boolean) => {\n if (success && props.onAfterSave) {\n props.onAfterSave(currentRecord);\n }\n props.onClickOk(currentRecord, success);\n });\n } else {\n props.onClickOk(currentRecord, true);\n }\n };\n\n const handleCancel = () => {\n props.onClickCancel(props.dataSource.getCurrentRecord()!);\n };\n\n return (\n <Modal\n opened={props.opened}\n onClose={handleCancel}\n title={getI18nextInstance().t('archbase:Usuário')}\n size=\"80%\"\n styles={{ content: { maxWidth: 1000 } }}\n >\n <ScrollArea style={{ height: '500px' }}>\n <Stack w={\"98%\"}>\n {options?.customContentBefore && (\n <>\n {options.customContentBefore(props.dataSource.getCurrentRecord()!)}\n </>\n )}\n <Grid>\n <Grid.Col span={{ base: 12, md: 6, lg: 6 }}>\n <Group>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Nome completo')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe o nome completo do usuário')}`}\n dataSource={props.dataSource}\n dataField=\"name\"\n required\n width={'calc(100% - 208px)'}\n />\n {options.showNickname && (\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Apelido')}`}\n placeholder={`${getI18nextInstance().t('archbase:Apelido')}`}\n dataSource={props.dataSource}\n dataField=\"nickname\"\n required={options.requiredNickname}\n />\n )}\n </Group>\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 6, lg: 6 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Descrição do usuário')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe a descrição do usuário')}`}\n dataSource={props.dataSource}\n dataField=\"description\"\n required\n />\n </Grid.Col>\n </Grid>\n <Grid>\n <Grid.Col span={{ base: 12, md: 6, lg: 6 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:E-mail')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe o e-mail do usuário')}`}\n dataSource={props.dataSource}\n onChangeValue={(value) => props.dataSource.setFieldValue(\"userName\", value)}\n dataField=\"email\"\n readOnly={props.dataSource.isEditing() ? !options.allowEditEmail : false}\n required\n />\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 6, lg: 6 }}>\n <ArchbasePasswordEdit\n label={`${getI18nextInstance().t('archbase:Senha usuário')}`}\n dataSource={props.dataSource}\n dataField=\"password\"\n error={passwordError}\n required={props.dataSource.getFieldValue(\"isNewUser\")}\n passwordPolicy={passwordPolicy}\n showPasswordRequirements={options.showPasswordRequirements}\n />\n </Grid.Col>\n </Grid>\n <Grid>\n {options.showProfile && (\n <Grid.Col span={{ base: 12, md: 6, lg: 6 }}>\n <ArchbaseSelect<UserDto, string, ProfileDto>\n label={`${getI18nextInstance().t('archbase:Perfil do usuário')}`}\n dataSource={props.dataSource}\n dataField=\"profile\"\n options={dsProfiles}\n allowDeselect={true}\n optionsLabelField=\"nome\"\n itemComponent={RenderProfileUserItem}\n getOptionLabel={(option: ProfileDto) => option.name}\n getOptionValue={(option: ProfileDto) => option.id}\n />\n </Grid.Col>\n )}\n </Grid>\n\n <Grid>\n <Grid.Col span={{ base: 12 }}>\n {options.showAccountConfigLabel && (<Text fz={14} fw={500}>Informe</Text>)}\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 4, lg: 4 }}>\n <Stack gap={'lg'}>\n {options.showChangePasswordOnNextLogin && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"changePasswordOnNextLogin\"\n label={`${getI18nextInstance().t('archbase:Deve alterar senha próximo login ?')}`}\n />\n </Input.Wrapper>\n )}\n {options.showAllowPasswordChange && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"allowPasswordChange\"\n label={`${getI18nextInstance().t('archbase:Pode alterar a senha ?')}`}\n />\n </Input.Wrapper>\n )}\n {options.showPasswordNeverExpires && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"passwordNeverExpires\"\n label={`${getI18nextInstance().t('archbase:Senha nunca expira ?')}`}\n />\n <Text fz={12} c=\"dimmed\">\n {getI18nextInstance().t(\n 'archbase:Desmarcado, a senha expira conforme a política de validade do servidor. Para exigir a troca agora, use \"Deve alterar senha próximo login\".'\n )}\n </Text>\n </Input.Wrapper>\n )}\n {options.showPasswordChangedAt && passwordChangedAt && (\n <Text fz={12} c=\"dimmed\">\n {`${getI18nextInstance().t('archbase:Última troca de senha')}: ${passwordChangedAt}`}\n </Text>\n )}\n </Stack>\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 4, lg: 4 }}>\n <Stack gap=\"lg\">\n {options.showAccountDeactivated && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"accountDeactivated\"\n label={`${getI18nextInstance().t('archbase:Conta desativada ?')}`}\n />\n </Input.Wrapper>\n )}\n {options.showAccountLocked && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"accountLocked\"\n label={`${getI18nextInstance().t('archbase:Conta bloqueada ?')}`}\n />\n </Input.Wrapper>\n )}\n {options.showIsAdministrator && (\n <Input.Wrapper label=\"\">\n <ArchbaseCheckbox\n dataSource={props.dataSource}\n dataField=\"isAdministrator\"\n label={`${getI18nextInstance().t('archbase:Administrador ?')}`}\n />\n </Input.Wrapper>\n )}\n </Stack>\n </Grid.Col>\n <Grid.Col span={{ base: 12, md: 4, lg: 4 }}>\n <Stack gap=\"lg\">\n <ArchbaseAvatarEdit\n label={getI18nextInstance().t('archbase:Foto do usuário')}\n dataSource={props.dataSource}\n dataField=\"avatar\"\n width={120}\n height={120}\n maxSizeKB={options.avatarMaxSizeKB}\n imageQuality={options.avatarImageQuality}\n maxOutputSizePx={options.avatarMaxOutputSizePx}\n />\n </Stack>\n </Grid.Col>\n </Grid>\n\n {options.showGroups && (\n <Grid>\n <Grid.Col span={{ base: 12 }}>\n <Text fz={14} fw={500}>Grupos</Text>\n </Grid.Col>\n <Grid.Col span={{ base: 12 }}>\n <ArchbaseDualListSelector<GroupDto, UserGroupDto>\n titleAvailable={getI18nextInstance().t('archbase:Disponíveis')}\n titleAssigned={getI18nextInstance().t('archbase:Selecionados')}\n assignedItemsDS={\n new ArchbaseDataSource('dsDualList', {\n records: props.dataSource.getFieldValue('groups'),\n grandTotalRecords: props.dataSource.getFieldValue('groups').length,\n currentPage: 0,\n totalPages: 0,\n pageSize: 999999\n })\n }\n width=\"100%\"\n height=\"200px\"\n availableItemsDS={dsGroups}\n handleCreateAssociationObject={(group: GroupDto) => {\n return UserGroupDto.newInstance(group)\n }}\n idFieldAssigned={(item: UserGroupDto) => (item && item.group ? item.group.id : '')}\n idFieldAvailable={'id'}\n labelFieldAssigned={(item: UserGroupDto) => (item && item.group ? item.group.name : '')}\n labelFieldAvailable={'name'}\n />\n </Grid.Col>\n </Grid>\n )}\n {options?.customContentAfter && (\n <>\n {options.customContentAfter(props.dataSource.getCurrentRecord()!)}\n </>\n )}\n <Space h={'12px'} />\n </Stack>\n </ScrollArea>\n \n <Group justify=\"flex-end\" mt=\"md\">\n <Button variant=\"default\" onClick={handleCancel}>\n {getI18nextInstance().t('archbase:Cancelar')}\n </Button>\n <Button onClick={handleSave}>\n {getI18nextInstance().t('archbase:Salvar')}\n </Button>\n </Group>\n </Modal>\n )\n}\n","/**\n * GroupModal — modal para gerenciar grupos/roles de usuários.\n * @status stable\n */\nimport React from 'react'\nimport { Grid, ScrollArea, Stack, Modal, Button, Group } from '@mantine/core'\nimport { getI18nextInstance } from '@archbase/core';\nimport { GroupDto } from '@archbase/security'\nimport { IArchbaseDataSourceBase } from '@archbase/data'\nimport { ArchbaseEdit } from '@archbase/components'\n\nexport interface GroupModalOptions {\n customContentBefore?: (group: GroupDto) => React.ReactNode;\n customContentAfter?: (group: GroupDto) => React.ReactNode;\n}\n\nexport interface GroupModalProps {\n dataSource: IArchbaseDataSourceBase<GroupDto>\n opened: boolean\n onClickOk: (record?: GroupDto, result?: any) => void\n onClickCancel: (record?: GroupDto) => void\n onCustomSave?: (record?: GroupDto, callback?: Function) => void\n onAfterSave?: (record?: GroupDto) => void\n options?: GroupModalOptions\n}\n\nexport const GroupModal = (props: GroupModalProps) => {\n const options = {...(props.options ?? {}) }\n \n const handleSave = () => {\n if (props.onCustomSave) {\n props.onCustomSave(props.dataSource.getCurrentRecord()!, (success: boolean) => {\n if (success && props.onAfterSave) {\n props.onAfterSave(props.dataSource.getCurrentRecord()!);\n }\n props.onClickOk(props.dataSource.getCurrentRecord()!, success);\n });\n } else {\n props.onClickOk(props.dataSource.getCurrentRecord()!, true);\n }\n };\n\n const handleCancel = () => {\n props.onClickCancel(props.dataSource.getCurrentRecord()!);\n };\n \n return (\n <Modal\n opened={props.opened}\n onClose={handleCancel}\n title={getI18nextInstance().t('archbase:Grupo')}\n size=\"60%\"\n styles={{content: {maxWidth: 1000}}}\n >\n <ScrollArea style={{ height: '460px' }}>\n <Stack w={\"98%\"}>\n {options?.customContentBefore && options.customContentBefore(props.dataSource.getCurrentRecord()!)}\n <Grid>\n <Grid.Col span={{ base: 12 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Nome do grupo')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe o nome do grupo')}`}\n dataSource={props.dataSource}\n dataField=\"name\"\n />\n </Grid.Col>\n <Grid.Col span={{ base: 12 }}>\n <ArchbaseEdit\n label={`${getI18nextInstance().t('archbase:Descrição do grupo')}`}\n placeholder={`${getI18nextInstance().t('archbase:Informe a descrição do grupo')}`}\n dataSource={props.dataSource}\n dataField=\"description\"\n />\n </Grid.Col>\n </Grid>\n {options?.customContentAfter && options.customContentAfter(props.dataSource.getCurrentRecord()!)}\n \n <Group justify=\"flex-end\" mt=\"md\">\n <Button variant=\"default\" onClick={handleCancel}>\n {getI18nextInstance().t('archbase:Cancelar')}\n </Button>\n <Button onClick={handleSave}>\n {getI18nextInstance().t('archbase:Salvar')}\n </Button>\n </Group>\n </Stack>\n </ScrollArea>\n </Modal>\n )\n}\n","/**\n * ApiTokenModal — modal para criação/edição de tokens de API.\n * @status stable\n */\nimport { ArchbaseDataSource } from '@archbase/data';\nimport { ArchbaseAsyncSelect, ArchbaseEdit, OptionsResult } from '@archbase/components';\nimport { useArchbaseRemoteServiceApi } from '@archbase/data';\nimport { Page } from '@archbase/data';\nimport { Modal } from '@mantine/core';\nimport { Grid, Group, Image, ScrollArea, Text, Button } from '@mantine/core';\nimport { DateTimePicker, DateValue } from '@mantine/dates';\nimport { useFocusTrap } from '@mantine/hooks';\nimport { ARCHBASE_IOC_API_TYPE, builder, convertDateToISOString, emit, processErrorMessage, isBase64Validate, getI18nextInstance } from '@archbase/core';\nimport { useArchbaseV1V2Compatibility } from '@archbase/data';\nimport { useArchbaseTranslation } from '@archbase/core';\nimport React, { useState } from 'react';\nimport { NO_USER } from './ArchbaseSecurityView';\nimport { ArchbaseUserService } from '@archbase/security';\nimport { ApiTokenDto, GroupDto, UserDto } from '@archbase/security';\n\nexport const UserSelectItem = ({ image, label, description, ...others }) => (\n\t<div {...others}>\n\t\t<Group grow>\n\t\t\t<img style={{maxWidth:'32px'}} src={image} />\n\t\t\t<div>\n\t\t\t\t<Text size=\"sm\">{label}</Text>\n\t\t\t\t<Text size=\"xs\" opacity={0.65}>\n\t\t\t\t\t{description}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t</Group>\n\t</div>\n);\n\nexport interface ApiTokenModalProps {\n\tdataSource: ArchbaseDataSource<ApiTokenDto, string>;\n\topened: boolean;\n\tonClickOk: (record?: ApiTokenDto, result?: any) => void;\n\tonClickCancel: (record?: ApiTokenDto) => void;\n\tonCustomSave?: (record?: ApiTokenDto, callback?: Function) => void;\n\tonAfterSave?: (record?: ApiTokenDto) => void;\n}\n\nexport const ApiTokenModal = (props: ApiTokenModalProps) => {\n\tconst focusTrapRef = useFocusTrap();\n\tconst [value, setValue] = useState<DateValue | undefined>();\n\tconst userApi = useArchbaseRemoteServiceApi<ArchbaseUserService>(ARCHBASE_IOC_API_TYPE.User);\n\n\t// 🔄 MIGRAÇÃO V1/V2: Hook de compatibilidade para ApiTokenModal\n\tconst v1v2Compatibility = useArchbaseV1V2Compatibility<string>(\n\t\t'ApiTokenModal',\n\t\tprops.dataSource,\n\t\t'expirationDate',\n\t\t''\n\t);\n\n\t// 🔄 MIGRAÇÃO V1/V2: Debug info para desenvolvimento\n\tif (process.env.NODE_ENV === 'development' && props.dataSource) {\n\t\tconsole.log(`[ApiTokenModal] DataSource version: ${v1v2Compatibility.dataSourceVersion}`);\n\t}\n\n\tconst handleChange = (value: DateValue) => {\n\t\tif (!value) {\n\t\t\t// 🔄 MIGRAÇÃO V1/V2: Usar handleValueChange do padrão de compatibilidade\n\t\t\tv1v2Compatibility.handleValueChange(undefined);\n\t\t} else {\n\t\t\t// Convert string to Date if needed before calling convertDateToISOString\n\t\t\tconst dateValue = typeof value === 'string' ? new Date(value) : value;\n\t\t\tconst isoString = convertDateToISOString(dateValue);\n\t\t\t// 🔄 MIGRAÇÃO V1/V2: Usar handleValueChange do padrão de compatibilidade\n\t\t\tv1v2Compatibility.handleValueChange(isoString);\n\t\t}\n\t\tsetValue(value);\n\t};\n\n\tconst loadRemoteUsers = async (page: number, value: string): Promise<OptionsResult<UserDto>> => {\n\t\treturn new Promise<OptionsResult<UserDto>>(async (resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst filter = emit(builder.or(builder.eq('name', `^*${value.trim()}*`)));\n\t\t\t\tconst result: Page<UserDto> = await userApi.findAllWithFilter(filter, page, 20);\n\t\t\t\tresolve({\n\t\t\t\t\toptions: result.content,\n\t\t\t\t\tpage: result.pageable!.pageNumber,\n\t\t\t\t\ttotalPages: result.totalPages,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\treject(processErrorMessage(error));\n\t\t\t}\n\t\t});\n\t};\n\n\tconst handleSave = () => {\n\t\tif (props.onCustomSave) {\n\t\t\tprops.onCustomSave(props.dataSource.current, (success: boolean) => {\n\t\t\t\tif (success && props.onAfterSave) {\n\t\t\t\t\tprops.onAfterSave(props.dataSource.current);\n\t\t\t\t}\n\t\t\t\tprops.onClickOk(props.dataSource.current, success);\n\t\t\t});\n\t\t} else {\n\t\t\tprops.onClickOk(props.dataSource.current, true);\n\t\t}\n\t};\n\n\tconst handleCancel = () => {\n\t\tprops.onClickCancel(props.dataSource.current);\n\t};\n\n\treturn (\n\t\t<Modal\n\t\t\topened={props.opened}\n\t\t\tonClose={handleCancel}\n\t\t\ttitle={getI18nextInstance().t('archbase:Token de API')}\n\t\t\tsize=\"50%\"\n\t\t>\n\t\t\t<ScrollArea style={{ height: '300px' }}>\n\t\t\t\t<ArchbaseEdit\n\t\t\t\t\tlabel={`${getI18nextInstance().t('archbase:Nome do token')}`}\n\t\t\t\t\tplaceholder={`${getI18nextInstance().t('archbase:Informe o nome do token')}`}\n\t\t\t\t\tdataSource={props.dataSource}\n\t\t\t\t\tdataField=\"name\"\n\t\t\t\t/>\n\t\t\t\t<ArchbaseEdit\n\t\t\t\t\tlabel={`${getI18nextInstance().t('archbase:Descrição do token')}`}\n\t\t\t\t\tplaceholder={`${getI18nextInstance().t('archbase:Informe a descrição do token')}`}\n\t\t\t\t\tdataSource={props.dataSource}\n\t\t\t\t\tdataField=\"description\"\n\t\t\t\t/>\n\t\t\t\t<DateTimePicker\n\t\t\t\t\twithSeconds={true}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tlabel=\"Data/hora expiração\"\n\t\t\t\t\tplaceholder={'Selecione a data de expiração'}\n\t\t\t\t/>\n\t\t\t\t<ArchbaseAsyncSelect<any, string, UserDto>\n\t\t\t\t\tlabel={`${getI18nextInstance().t('archbase:Usuário')}`}\n\t\t\t\t\tdataSource={props.dataSource}\n\t\t\t\t\tdataField=\"user\"\n\t\t\t\t\tplaceholder={`${getI18nextInstance().t('archbase:Digite aqui o nome do usuário')}`}\n\t\t\t\t\tgetOptionLabel={(option: UserDto) => option && option.email ? option.email : ''}\n\t\t\t\t\tgetOptionValue={(option: UserDto) => option && option.id ? option.id.toString() : ''}\n\t\t\t\t\tgetOptions={loadRemoteUsers}\n\t\t\t\t\tdebounceTime={500}\n\t\t\t\t\tminCharsToSearch={1}\n\t\t\t\t\titemComponent={UserSelectItem}\n\t\t\t\t/>\n\t\t\t</ScrollArea>\n\t\t\t\n\t\t\t<Group justify=\"flex-end\" mt=\"md\">\n\t\t\t\t<Button variant=\"default\" onClick={handleCancel}>\n\t\t\t\t\t{getI18nextInstance().t('archbase:Cancelar')}\n\t\t\t\t</Button>\n\t\t\t\t<Button onClick={handleSave}>\n\t\t\t\t\t{getI18nextInstance().t('archbase:Salvar')}\n\t\t\t\t</Button>\n\t\t\t</Group>\n\t\t</Modal>\n\t);\n};\n","/**\n * PermissionsSelectorModal — modal para selecionar permissões/roles.\n * @status stable\n */\nimport React, { useCallback, useEffect, useState, useMemo } from \"react\";\nimport { ARCHBASE_IOC_API_TYPE, getKeyByEnumValue, getI18nextInstance } from \"@archbase/core\";\nimport { ActionIcon, Badge, Button, Group, Modal, Paper, ScrollArea, Stack, Text, TextInput, Tooltip, Tree, TreeNodeData, useMantineColorScheme, useTree } from \"@mantine/core\";\nimport { IconArrowLeft, IconArrowRight, IconBorderCornerSquare, IconChevronDown } from \"@tabler/icons-react\";\nimport { SecurityType } from \"@archbase/security\";\nimport { useArchbaseRemoteServiceApi, IArchbaseDataSourceBase } from \"@archbase/data\";\nimport { ResouceActionPermissionDto, ResoucePermissionsWithTypeDto } from \"@archbase/security\";\nimport { ArchbaseResourceService } from \"@archbase/security\";\nimport { useDebouncedValue } from \"@mantine/hooks\";\nimport { ArchbaseSpaceBottom, ArchbaseSpaceFill, ArchbaseSpaceFixed } from \"@archbase/layout\";\n\nconst translateDelimitedString = (inputString) => {\n const delimiter = \"->\"\n if (inputString.includes(delimiter)) {\n const parts = inputString.split(delimiter).map(part => part.trim());\n\n const translatedParts = parts.map(part => getI18nextInstance().t(part));\n\n return translatedParts.join(` ${delimiter} `);\n }\n\n return getI18nextInstance().t(inputString);\n};\n\nexport interface PermissionsSelectorProps {\n dataSource: IArchbaseDataSourceBase<any> | null\n opened: boolean\n close: () => void\n}\n\nexport function PermissionsSelectorModal({ dataSource, opened, close }: PermissionsSelectorProps) {\n // Memoiza os valores do dataSource para evitar recálculos\n const name = useMemo(() => dataSource?.getFieldValue(\"name\") || '', [dataSource]);\n const securityId = useMemo(() => dataSource?.getFieldValue(\"id\") || '', [dataSource]);\n const type = useMemo(() => dataSource?.getFieldValue(\"type\") || '', [dataSource]);\n\n const availablePermissionsTree = useTree()\n const grantedPermissionsTree = useTree()\n const [availablePermissions, setAvailablePermissions] = useState<ResoucePermissionsWithTypeDto[]>([])\n const [grantedPermissions, setGrantedPermissions] = useState<ResoucePermissionsWithTypeDto[]>([])\n const [selectedAvailablePermission, setSelectedAvailablePermission] = useState<TreeNodeData>()\n const [selectedGrantedPermission, setSelectedGrantedPermission] = useState<TreeNodeData>()\n const [availablePermissionsFilter, setAvailablePermissionsFilter] = useState(\"\")\n const [debouncedAvailablePermissionsFilter] = useDebouncedValue(availablePermissionsFilter, 200);\n const [grantedPermissionsFilter, setGrantedPermissionsFilter] = useState(\"\")\n const [debouncedGrantedPermissionsFilter] = useDebouncedValue(grantedPermissionsFilter, 200);\n\n\n const resourceApi = useArchbaseRemoteServiceApi<ArchbaseResourceService>(ARCHBASE_IOC_API_TYPE.Resource)\n\n const { colorScheme } = useMantineColorScheme();\n const selectedColor = colorScheme === \"dark\" ? \"var(--mantine-primary-color-7)\" : \"var(--mantine-primary-color-4)\"\n\n const permissionsGrantedData = useMemo(() => grantedPermissions\n .sort((a, b) => a.resourceDescription.localeCompare(b.resourceDescription))\n .map(resourcePermissions => {\n return (\n {\n value: resourcePermissions.resourceId,\n label: resourcePermissions.resourceDescription,\n children: resourcePermissions.permissions\n .filter(permission => permission.actionDescription.toLowerCase().includes(debouncedGrantedPermissionsFilter.toLowerCase()))\n .sort((a, b) => a.actionDescription.localeCompare(b.actionDescription))\n .map(permission => {\n return {\n value: permission.actionId,\n label: permission.actionDescription,\n nodeProps: {\n permissionId: permission.permissionId,\n types: permission.types ?? [],\n owner: resourcePermissions\n }\n }\n })\n }\n )\n }), [grantedPermissions, debouncedGrantedPermissionsFilter])\n\n const grantedPermissionsActionIds = useMemo(() => grantedPermissions\n .map(resourcePermissions => resourcePermissions.permissions.map(permission => permission.actionId))\n .flat(), [grantedPermissions])\n\n const allPermissionsData = useMemo(() => availablePermissions\n .sort((a, b) => a.resourceDescription.localeCompare(b.resourceDescription))\n .map(resourcePermissions => {\n return (\n {\n value: resourcePermissions.resourceId,\n label: resourcePermissions.resourceDescription,\n children: resourcePermissions.permissions\n .filter(permission => permission.actionDescription.toLowerCase().includes(debouncedAvailablePermissionsFilter.toLowerCase()))\n .sort((a, b) => a.actionDescription.localeCompare(b.actionDescription))\n .map(permission => {\n const permissionGranted = grantedPermissions\n .find(resourcePermissionsGranted => resourcePermissionsGranted.resourceId === resourcePermissions.resourceId)?.permissions\n .find(permissionGranted => permissionGranted.actionId === permission.actionId)\n return (\n {\n value: permission.actionId,\n label: permission.actionDescription,\n nodeProps: {\n granted: grantedPermissionsActionIds.includes(permission.actionId) && permissionGranted?.types?.includes(getKeyByEnumValue(SecurityType, type)!),\n owner: resourcePermissions\n }\n }\n )\n })\n }\n )\n }), [availablePermissions, grantedPermissions, grantedPermissionsActionIds, type, debouncedAvailablePermissionsFilter])\n\n const loadPermissions = useCallback(async () => {\n if (securityId) {\n const permissionsGranted = await resourceApi.getPermissionsBySecurityId(securityId, type)\n const allPermissions = await resourceApi.getAllPermissionsAvailable()\n setAvailablePermissions(allPermissions)\n setGrantedPermissions(permissionsGranted)\n }\n }, [securityId, type])\n\n const handleAdd = useCallback(() => {\n if (selectedAvailablePermission?.value && securityId) {\n resourceApi.createPermission(securityId, selectedAvailablePermission.value, type)\n .then((resouceActionPermissionDto: ResouceActionPermissionDto) => {\n if (resouceActionPermissionDto) {\n setGrantedPermissions(permissionsGranted => {\n let updatedPermissionsGranted;\n if (permissionsGranted.map(resourcePermissions => resourcePermissions.resourceId).includes(resouceActionPermissionDto.resourceId)) {\n updatedPermissionsGranted = permissionsGranted.map(resourcePermissions => {\n if (resourcePermissions.resourceId === resouceActionPermissionDto.resourceId) {\n if (resourcePermissions.permissions.map(permission => permission.actionId).includes(selectedAvailablePermission.value)) {\n return (\n {\n ...resourcePermissions,\n permissions: resourcePermissions.permissions.map(permission =>\n permission.actionId === selectedAvailablePermission.value ? {\n ...permission,\n permissionId: resouceActionPermissionDto.permissionId,\n types: [...(permission.types ?? []), getKeyByEnumValue(SecurityType, type)!],\n } : permission\n )\n }\n )\n }\n return (\n {\n ...resourcePermissions,\n permissions: [...(resourcePermissions.permissions ?? []),\n {\n actionId: resouceActionPermissionDto.actionId,\n actionDescription: resouceActionPermissionDto.actionDescription,\n permissionId: resouceActionPermissionDto.permissionId,\n types: [getKeyByEnumValue(SecurityType, type)!]\n }]\n }\n )\n }\n return resourcePermissions\n });\n } else {\n updatedPermissionsGranted = [\n ...permissionsGranted,\n {\n resourceId: resouceActionPermissionDto.resourceId,\n resourceDescription: resouceActionPermissionDto.resourceDescription,\n permissions: [\n {\n actionId: resouceActionPermissionDto.actionId,\n actionDescription: resouceActionPermissionDto.actionDescription,\n permissionId: resouceActionPermissionDto.permissionId,\n types: [getKeyByEnumValue(SecurityType, type)!]\n }\n ]\n }\n ]\n }\n\n return updatedPermissionsGranted\n })\n\n const resourceAvailablePermissions = allPermissionsData\n .filter((resourcePermissionsNode: any) => resourcePermissionsNode.value === selectedAvailablePermission?.nodeProps?.owner?.resourceId)\n .map((resourcePermissionsNode: any) => resourcePermissionsNode.children).flat()\n\n const previousSelectedPermissionIndex = resourceAvailablePermissions.map((permission: any) => permission.value).indexOf(selectedAvailablePermission.value)\n const nextSelectedAvailablePermission = resourceAvailablePermissions\n .find((permissionNode: any, index: any) => !permissionNode?.nodeProps?.granted\n && permissionNode?.value !== selectedAvailablePermission.value\n && (resourceAvailablePermissions.length > previousSelectedPermissionIndex + 1\n ? index > previousSelectedPermissionIndex\n : true))\n if (nextSelectedAvailablePermission?.value) {\n availablePermissionsTree.select(nextSelectedAvailablePermission.value)\n }\n grantedPermissionsTree.expand(resouceActionPermissionDto.resourceId)\n setSelectedAvailablePermission(nextSelectedAvailablePermission)\n }\n })\n }\n }, [selectedAvailablePermission, securityId, type, resourceApi, allPermissionsData, availablePermissions, grantedPermissions, availablePermissionsTree, grantedPermissionsTree])\n\n const handleRemove = useCallback(() => {\n if (selectedGrantedPermission?.nodeProps?.permissionId) {\n resourceApi.deletePermission(selectedGrantedPermission.nodeProps.permissionId)\n .then(() => {\n setGrantedPermissions(permissionsGranted => {\n const updatedPermissionsGranted = [...permissionsGranted]\n .filter(resourcePermissions => {\n let hasOnePermissionOnResource = true\n resourcePermissions.permissions?.forEach(permission => {\n if (permission.permissionId !== undefined\n && permission.permissionId === selectedGrantedPermission?.nodeProps?.permissionId\n && resourcePermissions.permissions.length === 1\n && permission?.types?.length === 1\n && permission.types[0] === getKeyByEnumValue(SecurityType, type)) {\n hasOnePermissionOnResource = false;\n }\n })\n return hasOnePermissionOnResource;\n })\n .map(resourcePermissions => {\n const resource: ResoucePermissionsWithTypeDto = selectedGrantedPermission?.nodeProps?.owner\n if (resourcePermissions.resourceId === resource.resourceId) {\n if (selectedGrantedPermission?.nodeProps?.types?.length === 1) {\n return ({\n ...resourcePermissions,\n permissions: [...(resourcePermissions.permissions ?? [])\n .filter(permission => permission.permissionId !== selectedGrantedPermission?.nodeProps?.permissionId)]\n })\n }\n return (\n {\n ...resourcePermissions,\n permissions: (resourcePermissions.permissions ?? [])\n .map(permission => permission.actionId === selectedGrantedPermission.value\n ? ({\n actionId: permission.actionId,\n actionDescription: permission.actionDescription,\n types: [...(permission.types?.filter(currentType => currentType && (currentType !== getKeyByEnumValue(SecurityType, type))) ?? [])]\n }) : permission)\n }\n )\n }\n return resourcePermissions\n })\n return updatedPermissionsGranted\n })\n\n const resourceGrantedPermissions = permissionsGrantedData\n .filter((resourcePermissionsNode: any) => resourcePermissionsNode.value === selectedGrantedPermission?.nodeProps?.owner?.resourceId)\n .map((resourcePermissionsNode: any) => resourcePermissionsNode.children).flat()\n\n const previousSelectedPermissionIndex = resourceGrantedPermissions.map((permission: any) => permission.value).indexOf(selectedGrantedPermission.value)\n\n const nextSelectedGrantedPermission = resourceGrantedPermissions\n .find((permissionNode: any, index: any) => permissionNode?.nodeProps?.types.includes(getKeyByEnumValue(SecurityType, type))\n && permissionNode?.value !== selectedGrantedPermission.value\n && (resourceGrantedPermissions.length > previousSelectedPermissionIndex + 1 ? index > previousSelectedPermissionIndex : true))\n if (nextSelectedGrantedPermission?.value) {\n grantedPermissionsTree.select(nextSelectedGrantedPermission.value)\n }\n setSelectedGrantedPermission(nextSelectedGrantedPermission)\n })\n }\n }, [selectedGrantedPermission, resourceApi, type, permissionsGrantedData, grantedPermissions, grantedPermissionsTree])\n\n useEffect(() => {\n if (opened && dataSource) {\n setSelectedAvailablePermission(undefined)\n setSelectedGrantedPermission(undefined)\n setAvailablePermissionsFilter(\"\")\n setGrantedPermissionsFilter(\"\")\n grantedPermissionsTree.collapseAllNodes()\n availablePermissionsTree.collapseAllNodes()\n loadPermissions()\n }\n }, [opened, type, securityId, loadPermissions])\n\n // Não exibir o modal se não houver dataSource\n if (!dataSource) {\n return null;\n }\n\n return (\n <Modal opened={opened} onClose={close} title={`${getI18nextInstance().t(`archbase:${type}`)}: ${name}`} size={\"80%\"} styles={{ root: { overflow: \"hidden\" } }}>\n <ArchbaseSpaceFixed height={\"540px\"}>\n <ArchbaseSpaceFill>\n <Paper withBorder my={20} p={20} style={{ height: 'calc(100% - 40px)', overflow: 'hidden', display: 'flex', flexDirection: 'column' }}>\n <div style={{ flex: 1, display: 'flex', flexDirection: 'row', overflow: 'hidden', minHeight: 0, gap: '8px' }}>\n <div style={{ flex: 9, display: 'flex', flexDirection: 'column', overflow: 'hidden', minHeight: 0 }}>\n <Group mb={20}>\n <Text>{getI18nextInstance().t('archbase:Available')}</Text>\n <TextInput\n size=\"xs\"\n value={availablePermissionsFilter}\n onChange={(event) => setAvailablePermissionsFilter(event.target.value)}\n placeholder={getI18nextInstance().t('archbase:Filter available permissions')}\n />\n </Group>\n <ScrollArea style={{ flex: 1, minHeight: 0 }}>\n <Tree\n data={allPermissionsData}\n selectOnClick={true}\n allowRangeSelection={false}\n tree={availablePermissionsTree}\n renderNode={({ level, node, expanded, hasChildren, selected, elementProps }) => {\n const isGranted = node?.nodeProps?.granted;\n const textColor = isGranted ? \"dimmed\" : undefined;\n const textDecoration = isGranted ? \"line-through\" : undefined;\n\n const handleClick = useCallback((event: any) => {\n setSelectedAvailablePermission(node)\n elementProps.onClick(event)\n }, [node, elementProps.onClick])\n\n return (\n <Group ml={hasChildren ? 0 : 5} gap={5} {...elementProps}\n bg={selected && level === 2 ? selectedColor : \"\"}\n onClick={handleClick}\n >\n {hasChildren && (\n <IconChevronDown\n size={18}\n style={{ transform: expanded ? 'rotate(0deg)' : 'rotate(-90deg)' }}\n />\n )}\n {!hasChildren && (\n <IconBorderCornerSquare\n size={12}\n style={{ transform: 'rotate(-90deg)', marginTop: \"-5px\" }}\n />\n )}\n <Text\n c={textColor}\n td={textDecoration}\n >\n {translateDelimitedString(node.label as string)}\n </Text>\n </Group>\n )\n }\n }\n />\n </ScrollArea>\n </div>\n <div style={{ flex: 2, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Stack gap={5} align=\"center\">\n <Tooltip label={getI18nextInstance().t('archbase:Add')}>\n <ActionIcon onClick={handleAdd} disabled={!selectedAvailablePermission || selectedAvailablePermission?.nodeProps?.granted || !selectedAvailablePermission.nodeProps}>\n <IconArrowRight />\n </ActionIcon>\n </Tooltip>\n <Tooltip label={getI18nextInstance().t('archbase:Remove')}>\n <ActionIcon onClick={handleRemove} disabled={!selectedGrantedPermission || !selectedGrantedPermission?.nodeProps?.permissionId || !selectedGrantedPermission.nodeProps}>\n <IconArrowLeft />\n </ActionIcon>\n </Tooltip>\n </Stack>\n </div>\n <div style={{ flex: 9, display: 'flex', flexDirection: 'column', overflow: 'hidden', minHeight: 0 }}>\n <Group mb={20}>\n <Text>{getI18nextInstance().t('archbase:Granted')}</Text>\n <TextInput\n size=\"xs\"\n value={grantedPermissionsFilter}\n onChange={(event) => setGrantedPermissionsFilter(event.target.value)}\n placeholder={getI18nextInstance().t('archbase:Filter granted permissions')}\n />\n </Group>\n <ScrollArea style={{ flex: 1, minHeight: 0 }}>\n <Tree\n data={permissionsGrantedData}\n selectOnClick={true}\n allowRangeSelection={false}\n tree={grantedPermissionsTree}\n renderNode={({ level, node, expanded, hasChildren, selected, elementProps }) => {\n const handleClick = useCallback((event: any) => {\n setSelectedGrantedPermission(node)\n elementProps.onClick(event)\n }, [node, elementProps.onClick])\n\n return (\n <Group ml={hasChildren ? 0 : 5} gap={5} {...elementProps} bg={selected && level === 2 ? selectedColor : \"\"}\n onClick={handleClick}\n >\n {hasChildren && (\n <IconChevronDown\n size={18}\n style={{ transform: expanded ? 'rotate(0deg)' : 'rotate(-90deg)' }}\n />\n )}\n {!hasChildren && (\n <IconBorderCornerSquare\n size={12}\n style={{ transform: 'rotate(-90deg)', marginTop: \"-5px\" }}\n />\n )}\n <Text>{translateDelimitedString(node.label as string)}</Text>\n {node?.nodeProps?.types?.includes(\"USER\") && <Badge color=\"blue\">{getI18nextInstance().t('archbase:user')}</Badge>}\n {node?.nodeProps?.types?.includes(\"GROUP\") && <Badge color=\"orange\">{getI18nextInstance().t('archbase:group')}</Badge>}\n {node?.nodeProps?.types?.includes(\"PROFILE\") && <Badge color=\"pink\">{getI18nextInstance().t('archbase:profile')}</Badge>}\n </Group>\n )\n }}\n />\n </ScrollArea>\n </div>\n </div>\n </Paper>\n </ArchbaseSpaceFill>\n <ArchbaseSpaceBottom size=\"40px\">\n <Group justify=\"flex-end\">\n <Button onClick={close}>{getI18nextInstance().t(\"archbase:Close\")}</Button>\n </Group>\n </ArchbaseSpaceBottom>\n </ArchbaseSpaceFixed>\n </Modal>\n )\n}\n","/**\n * Avatar exibido quando o usuário não tem imagem.\n *\n * Mora em arquivo próprio porque são ~2 KB de base64 no meio do código: dentro da view\n * ele empurrava a lógica para baixo da dobra em qualquer editor.\n */\nexport const NO_USER =\n\t'data:image/png;base64,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';\n","/**\n * Item de usuário para listas — avatar, nome e e-mail.\n */\nimport React, { useRef } from 'react';\nimport { Badge, Group, Text } from '@mantine/core';\nimport { isBase64Validate } from '@archbase/core';\nimport { useArchbaseListContext, type ArchbaseListCustomItemProps } from '@archbase/components';\nimport type { UserDto } from '@archbase/security';\nimport { NO_USER } from './noUserAvatar';\n\nexport const renderGroups = (user: UserDto) => {\n\tif (!user.groups) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<div style={{ display: 'flex' }}>\n\t\t\t{user.groups\n\t\t\t\t.slice()\n\t\t\t\t.sort((a, b) => (a.group?.name ?? '').localeCompare(b.group?.name ?? ''))\n\t\t\t\t.map((item, index) => (\n\t\t\t\t\t<div key={index} style={{ paddingRight: '2px' }}>\n\t\t\t\t\t\t<Badge color=\"blue\">{item.group?.name}</Badge>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t</div>\n\t);\n};\n\nexport const renderProfile = (user: UserDto) => {\n\tif (!user.profile) {\n\t\treturn null;\n\t}\n\treturn <Badge color=\"green\">{user.profile?.name}</Badge>;\n};\n\nexport interface UserItemProps extends ArchbaseListCustomItemProps<UserDto, string> {}\n\nexport const UserItem = (props: UserItemProps) => {\n\t// A chamada a useArchbaseTheme() saiu na separação: o valor nunca era usado.\n\tconst listContextValue = useArchbaseListContext<UserDto, string>();\n\tconst itemRef = useRef<any>(null);\n\n\tconst handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n\t\tevent.preventDefault();\n\t\tif (!props.disabled) {\n\t\t\tif (listContextValue.handleSelectItem) {\n\t\t\t\tlistContextValue.handleSelectItem(props.index, props.recordData!);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst avatar =\n\t\tprops.recordData && props.recordData.avatar && isBase64Validate(props.recordData.avatar)\n\t\t\t? atob(props.recordData.avatar)\n\t\t\t: NO_USER;\n\tconst backgroundColor = props.active ? listContextValue.activeBackgroundColor : '';\n\tconst color = props.active ? listContextValue.activeColor : '';\n\n\treturn (\n\t\t<div\n\t\t\tonClick={handleClick}\n\t\t\tstyle={{\n\t\t\t\tpadding: '8px',\n\t\t\t\tbackgroundColor,\n\t\t\t\tcolor,\n\t\t\t\tcursor: props.disabled ? 'not-allowed' : 'pointer',\n\t\t\t}}\n\t\t\tref={itemRef}\n\t\t\ttabIndex={-1}\n\t\t>\n\t\t\t<Group wrap=\"nowrap\">\n\t\t\t\t<img\n\t\t\t\t\tstyle={{ width: '48px', borderRadius: 50 }}\n\t\t\t\t\tsrc={avatar}\n\t\t\t\t\talt={props.recordData ? props.recordData.userName : ''}\n\t\t\t\t/>\n\t\t\t\t<div>\n\t\t\t\t\t<Text size=\"sm\">{props.recordData.name}</Text>\n\t\t\t\t\t<Text size=\"xs\" opacity={0.65}>\n\t\t\t\t\t\t{props.recordData.email}\n\t\t\t\t\t</Text>\n\t\t\t\t</div>\n\t\t\t</Group>\n\t\t</div>\n\t);\n};\n","/**\n * Definições de coluna dos grids da {@link ArchbaseSecurityView}.\n *\n * <p>Eram 250 das 1047 linhas da view — JSX declarativo que empurrava a lógica para longe\n * de quem a lia. Dependiam apenas da função de tradução, então saem como fábricas que a\n * recebem, e passam a poder ser reusadas por outras telas do pacote.\n */\nimport React from 'react';\nimport { Badge, Text } from '@mantine/core';\nimport { ArchbaseDataGridColumn, Columns } from '@archbase/components';\nimport { NO_USER } from './noUserAvatar';\nimport { renderGroups, renderProfile } from './UserItem';\nimport type { AccessTokenDto, GroupDto, ProfileDto, ResourceDto, UserDto } from '@archbase/security';\n\n/** A função de tradução do {@code useArchbaseTranslation}. */\n/** Assinatura do `t` devolvido por useArchbaseTranslation. */\nexport type TranslateFn = (chave: string, opcoes?: any) => string | object;\n\n\nexport const buildAccessTokenColumns = (t: TranslateFn) => (\n\t<Columns>\n\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\tdataField=\"user.avatar\"\n\t\t\tdataType=\"image\"\n\t\t\tsize={80}\n\t\t\theader={`${t('archbase:Foto')}`}\n\t\t\trender={(data) => (\n\t\t\t\t<img\n\t\t\t\t\tstyle={{ borderRadius: 50, height: '32px', maxHeight: '32px' }}\n\t\t\t\t\tsrc={data.row.user && data.row.user.avatar ? atob(data.row.user.avatar) : NO_USER}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\tinputFilterType=\"text\"\n\t\t\talign=\"center\"\n\t\t\texportable={false}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\tdataField=\"user.userName\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={300}\n\t\t\theader={`${t('archbase:Nome de Usuário')}`}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\tdataField=\"user.email\"\n\t\t\tdataType=\"text\"\n\t\t\theader={`${t('archbase:Email')}`}\n\t\t\tsize={300}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\tdataField=\"expirationDate\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={300}\n\t\t\theader={`${t('archbase:Expira em')}`}\n\t\t\trender={(data) => <Text size=\"sm\">{data.row.expirationDate}</Text>}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\tdataField=\"revoked\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Revogado ?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\tdataField=\"expired\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Expirado ?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<AccessTokenDto>\n\t\t\tdataField=\"token\"\n\t\t\tdataType=\"text\"\n\t\t\theader={`${t('archbase:Token Acesso')}`}\n\t\t\tsize={300}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t</Columns>\n);\n\nexport const buildUserColumns = (t: TranslateFn) => (\n\t<Columns>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"avatar\"\n\t\t\tdataType=\"image\"\n\t\t\tsize={80}\n\t\t\theader={`${t('archbase:Foto')}`}\n\t\t\trender={(data) => (\n\t\t\t\t<img\n\t\t\t\t\tstyle={{ borderRadius: 50, height: '32px', maxHeight: '32px' }}\n\t\t\t\t\tsrc={data.row.avatar ? atob(data.row.avatar) : NO_USER}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\tenableSorting={false}\n\t\t\tenableColumnFilter={false}\n\t\t\tenableGlobalFilter={false}\n\t\t\talign=\"center\"\n\t\t\texportable={false}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"name\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={300}\n\t\t\theader={`${t('archbase:Nome')}`}\n\t\t\tinputFilterType=\"text\"\n\t\t\ttruncate={true}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"nickname\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={120}\n\t\t\theader={`${t('archbase:Apelido')}`}\n\t\t\tinputFilterType=\"text\"\n\t\t\ttruncate={true}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"email\"\n\t\t\tdataType=\"text\"\n\t\t\theader={`${t('archbase:Email')}`}\n\t\t\tsize={300}\n\t\t\tinputFilterType=\"text\"\n\t\t\ttruncate={true}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"accountDeactivated\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Desativado?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t\tsize={120}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"profile.name\"\n\t\t\tdataType=\"text\"\n\t\t\theader={`${t('archbase:Perfil')}`}\n\t\t\tsize={200}\n\t\t\trender={(data) => renderProfile(data.row)}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"groups\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={300}\n\t\t\theader={`${t('archbase:Grupos')}`}\n\t\t\trender={(data) => renderGroups(data.row)}\n\t\t\texportValue={(row) =>\n\t\t\t\trow.groups\n\t\t\t\t\t?.slice()\n\t\t\t\t\t.sort((a, b) => (a.group?.name ?? '').localeCompare(b.group?.name ?? ''))\n\t\t\t\t\t.map((g) => g.group?.name)\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(', ') || ''\n\t\t\t}\n\t\t\tenableSorting={false}\n\t\t\tenableColumnFilter={false}\n\t\t\tenableGlobalFilter={false}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"isAdministrator\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Admin ?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"changePasswordOnNextLogin\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Alt.senha próximo login?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t\tsize={120}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"allowPasswordChange\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Pode alterar senha?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t\tsize={120}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"allowMultipleLogins\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Permite multiplos logins?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t\tsize={120}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"passwordNeverExpires\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Senha nunca expira?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t\tsize={120}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"passwordChangedAt\"\n\t\t\tdataType=\"datetime\"\n\t\t\theader={`${t('archbase:Última troca de senha')}`}\n\t\t\tinputFilterType=\"date-range\"\n\t\t\tsize={160}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"accountLocked\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Bloqueado?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t\tsize={120}\n\t\t/>\n\t\t<ArchbaseDataGridColumn<UserDto>\n\t\t\tdataField=\"unlimitedAccessHours\"\n\t\t\tdataType=\"boolean\"\n\t\t\theader={`${t('archbase:Horário acesso ilimitado?')}`}\n\t\t\tinputFilterType=\"checkbox\"\n\t\t\tsize={140}\n\t\t/>\n\t</Columns>\n);\n\nexport const buildGroupColumns = (t: TranslateFn) => (\n\t<Columns>\n\t\t<ArchbaseDataGridColumn<GroupDto>\n\t\t\tdataField=\"name\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={300}\n\t\t\theader={`${t('archbase:Nome do grupo')}`}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<GroupDto>\n\t\t\tdataField=\"description\"\n\t\t\tdataType=\"text\"\n\t\t\theader={`${t('archbase:Descrição')}`}\n\t\t\tsize={800}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t</Columns>\n);\n\nexport const buildProfileColumns = (t: TranslateFn) => (\n\t<Columns>\n\t\t<ArchbaseDataGridColumn<ProfileDto>\n\t\t\tdataField=\"name\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={300}\n\t\t\theader={`${t('archbase:Nome do perfil')}`}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<ProfileDto>\n\t\t\tdataField=\"description\"\n\t\t\tdataType=\"text\"\n\t\t\theader={`${t('archbase:Descrição')}`}\n\t\t\tsize={800}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t</Columns>\n);\n\nexport const buildResourceColumns = (t: TranslateFn) => (\n\t<Columns>\n\t\t<ArchbaseDataGridColumn<ResourceDto>\n\t\t\tdataField=\"name\"\n\t\t\tdataType=\"text\"\n\t\t\tsize={300}\n\t\t\theader={`${t('archbase:Nome do recurso')}`}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t\t<ArchbaseDataGridColumn<ResourceDto>\n\t\t\tdataField=\"description\"\n\t\t\tdataType=\"text\"\n\t\t\theader={`${t('archbase:Descrição')}`}\n\t\t\tsize={800}\n\t\t\tinputFilterType=\"text\"\n\t\t/>\n\t</Columns>\n);\n","/**\n * O painel de uma aba da {@link ArchbaseSecurityView}.\n *\n * <p>As cinco abas eram o mesmo bloco escrito cinco vezes: um {@code Paper} que se esconde por\n * {@code display} e um {@code ArchbaseDataGrid} com quinze props idênticas. Só seis coisas\n * mudavam de uma para outra — e eram justamente elas que ficavam difíceis de achar no meio da\n * repetição.\n *\n * <p>A aba inativa é escondida por {@code display: none} em vez de desmontada, de propósito:\n * é o que preserva rolagem, filtro e seleção ao trocar de aba. Era assim antes e continua.\n */\nimport React, { type ReactNode } from 'react';\nimport { Paper } from '@mantine/core';\nimport { ArchbaseDataGrid, type ArchbaseDataGridRef } from '@archbase/components';\nimport type { IArchbaseDataSourceBase } from '@archbase/data';\n\nexport interface SecurityGridPanelProps<T extends object> {\n\t/** Aba visível. A escondida permanece montada. */\n\tactive: boolean;\n\tprintTitle: string;\n\tgridRef: React.MutableRefObject<ArchbaseDataGridRef | null>;\n\tdataSource: IArchbaseDataSourceBase<T>;\n\tisLoading: boolean;\n\terror?: string;\n\tgetRowId: (row: T) => string;\n\tstriped?: boolean;\n\t/** Recursos e tokens de acesso não têm ações por linha. */\n\tenableRowActions?: boolean;\n\ttoolbarLeftContent?: ReactNode;\n\trenderRowActions?: (row: T) => ReactNode;\n\tactionsColumnWidth?: number;\n\t/** As colunas, no formato declarativo do grid. */\n\tchildren: ReactNode;\n}\n\nexport function SecurityGridPanel<T extends object>({\n\tactive,\n\tprintTitle,\n\tgridRef,\n\tdataSource,\n\tisLoading,\n\terror,\n\tgetRowId,\n\tstriped = false,\n\tenableRowActions = true,\n\ttoolbarLeftContent,\n\trenderRowActions,\n\tactionsColumnWidth,\n\tchildren,\n}: SecurityGridPanelProps<T>) {\n\treturn (\n\t\t<Paper\n\t\t\twithBorder\n\t\t\tmt=\"md\"\n\t\t\tstyle={{\n\t\t\t\tdisplay: active ? 'flex' : 'none',\n\t\t\t\twidth: '100%',\n\t\t\t\tflex: 1,\n\t\t\t\tminHeight: 0,\n\t\t\t\toverflow: 'auto',\n\t\t\t}}\n\t\t>\n\t\t\t<ArchbaseDataGrid<T, string>\n\t\t\t\tgridRef={gridRef}\n\t\t\t\tprintTitle={printTitle}\n\t\t\t\twidth={'100%'}\n\t\t\t\theight={'100%'}\n\t\t\t\twithBorder={false}\n\t\t\t\tdataSource={dataSource}\n\t\t\t\twithColumnBorders={true}\n\t\t\t\tstriped={striped}\n\t\t\t\tenableTopToolbar={true}\n\t\t\t\tenableRowActions={enableRowActions}\n\t\t\t\tpageSize={50}\n\t\t\t\tisLoading={isLoading}\n\t\t\t\tisError={!!error}\n\t\t\t\terror={error}\n\t\t\t\tenableGlobalFilter={true}\n\t\t\t\tgetRowId={getRowId}\n\t\t\t\ttoolbarLeftContent={toolbarLeftContent}\n\t\t\t\trenderRowActions={renderRowActions}\n\t\t\t\tactionsColumnWidth={actionsColumnWidth}\n\t\t\t\tchildren={children}\n\t\t\t/>\n\t\t</Paper>\n\t);\n}\n","/**\n * Os gestos de uma entidade da {@link ArchbaseSecurityView}: adicionar, ver, editar, remover,\n * salvar, cancelar e abrir permissões.\n *\n * <p><b>Por que existe.</b> A view tinha cinco famílias destes handlers, uma por entidade,\n * quase idênticas. \"Quase\" era o problema: {@code handleUserEditRow} chamava {@code edit()}\n * sem a guarda {@code isEditing()} que grupo e perfil tinham — a guarda foi acrescentada em\n * dois dos três e nunca retroportada. Diferenças assim compilam igual e se comportam\n * diferente, e ninguém as vê enquanto o código está repetido cinco vezes.\n *\n * <p>A guarda agora vale para todos. É mudança de comportamento no fluxo de usuário, feita de\n * propósito: chamar {@code edit()} sobre uma edição em curso não tinha intenção por trás.\n *\n * <p>Coberto por {@code test/ArchbaseSecurityView.fluxos.test.tsx}.\n */\nimport { ArchbaseDialog } from '@archbase/components';\nimport type { IArchbaseDataSourceBase } from '@archbase/data';\nimport type { TranslateFn } from './columns';\n\nexport interface SecurityEntityActionsParams<T> {\n\tdataSource: IArchbaseDataSourceBase<T>;\n\t/** Discriminador usado para saber qual modal abrir. */\n\tsecurityType: string;\n\t/** Fábrica do registro novo — {@code UserDto.newInstance()} e afins. */\n\tnewInstance: () => T;\n\t/** Quando falso, o id do registro novo é apagado antes de inserir. */\n\tcreateEntitiesWithId: boolean;\n\t/**\n\t * Chave da mensagem de confirmação de remoção, já com o artigo e o substantivo:\n\t * {@code 'archbase:Deseja remover o usuário '}. O nome do registro é concatenado.\n\t */\n\tremoveMessageKey: string;\n\tsetOpenedModal: (valor: string) => void;\n\tsetOpenedPermissionsModal: (valor: string) => void;\n\tvalidationContext?: { clearAll: () => void };\n\tt: TranslateFn;\n}\n\nexport interface SecurityEntityActions<T> {\n\thandleAdd: () => void;\n\thandleViewRow: (row: any) => void;\n\thandleEditRow: (row: any) => void;\n\thandleRemoveRow: (row: any) => void;\n\thandleSaveModal: () => Promise<void>;\n\thandleCancelModal: () => void;\n\thandleOpenPermissionsModal: () => void;\n}\n\nexport function useSecurityEntityActions<T>({\n\tdataSource,\n\tsecurityType,\n\tnewInstance,\n\tcreateEntitiesWithId,\n\tremoveMessageKey,\n\tsetOpenedModal,\n\tsetOpenedPermissionsModal,\n\tvalidationContext,\n\tt,\n}: SecurityEntityActionsParams<T>): SecurityEntityActions<T> {\n\tconst ds = dataSource as any;\n\n\t/** Posiciona no registro da linha. Devolve nulo quando não há onde posicionar. */\n\tconst posicionarEm = (row: any) => {\n\t\tif (ds.isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\t\treturn ds.gotoRecordByData(row) ?? null;\n\t};\n\n\tconst handleAdd = () => {\n\t\tconst registro = newInstance();\n\t\tif (!createEntitiesWithId) {\n\t\t\t(registro as any).id = undefined;\n\t\t}\n\t\tds.insert(registro);\n\t\tsetOpenedModal(securityType);\n\t};\n\n\tconst handleViewRow = (row: any) => {\n\t\tif (posicionarEm(row)) {\n\t\t\tsetOpenedModal(securityType);\n\t\t}\n\t};\n\n\tconst handleEditRow = (row: any) => {\n\t\tif (!posicionarEm(row)) {\n\t\t\treturn;\n\t\t}\n\t\t// A guarda que faltava no fluxo de usuário — ver o cabeçalho deste arquivo.\n\t\tif (!ds.isEditing()) {\n\t\t\tds.edit();\n\t\t}\n\t\tsetOpenedModal(securityType);\n\t};\n\n\tconst handleRemoveRow = (row: any) => {\n\t\tif (!posicionarEm(row)) {\n\t\t\treturn;\n\t\t}\n\t\tArchbaseDialog.showConfirmDialogYesNo(\n\t\t\t`${t('archbase:Confirme')}`,\n\t\t\t`${t(removeMessageKey)}${row.name} ?`,\n\t\t\t() => {\n\t\t\t\tds.remove();\n\t\t\t},\n\t\t\t() => {},\n\t\t);\n\t};\n\n\tconst handleSaveModal = async () => {\n\t\ttry {\n\t\t\tawait ds.save();\n\t\t} catch (_error) {\n\t\t\t// Erro de gravação mantém o modal aberto para o operador corrigir.\n\t\t\treturn;\n\t\t}\n\t\tsetOpenedModal('');\n\t\tvalidationContext?.clearAll();\n\t};\n\n\tconst handleCancelModal = () => {\n\t\tsetOpenedModal('');\n\t\tif (!ds.isBrowsing()) {\n\t\t\tds.cancel();\n\t\t}\n\t\tvalidationContext?.clearAll();\n\t};\n\n\tconst handleOpenPermissionsModal = () => {\n\t\tsetOpenedPermissionsModal(securityType);\n\t};\n\n\treturn {\n\t\thandleAdd,\n\t\thandleViewRow,\n\t\thandleEditRow,\n\t\thandleRemoveRow,\n\t\thandleSaveModal,\n\t\thandleCancelModal,\n\t\thandleOpenPermissionsModal,\n\t};\n}\n","/**\n * As ações de uma linha: ver, editar, remover e permissões — na ordem em que aparecem.\n *\n * <p>Eram três blocos idênticos, um por entidade, diferindo só nos handlers e no slot. A\n * ordem dos ícones é parte do contrato da tela e está fixada em\n * {@code test/ArchbaseSecurityView.fluxos.test.tsx}, que localiza os botões por posição.\n */\nimport React, { type ReactNode } from 'react';\nimport { ActionIcon, Group, Tooltip, useMantineColorScheme } from '@mantine/core';\nimport { useArchbaseTheme } from '@archbase/core';\nimport { IconEdit, IconEye, IconShieldCheckered, IconTrashX } from '@tabler/icons-react';\nimport type { TranslateFn } from './columns';\n\nexport interface SecurityRowActionsProps<T> {\n\trow: T;\n\tonView: (row: T) => void;\n\tonEdit: (row: T) => void;\n\tonRemove: (row: T) => void;\n\tonEditPermissions: () => void;\n\t/** Slot: entra antes das ações padrão. */\n\tbefore?: (row: T) => ReactNode;\n\t/** Slot: entra depois das ações padrão. */\n\tafter?: (row: T) => ReactNode;\n\tt: TranslateFn;\n}\n\nexport function SecurityRowActions<T>({\n\trow,\n\tonView,\n\tonEdit,\n\tonRemove,\n\tonEditPermissions,\n\tbefore,\n\tafter,\n\tt,\n}: SecurityRowActionsProps<T>) {\n\tconst theme = useArchbaseTheme();\n\tconst { colorScheme } = useMantineColorScheme();\n\tconst escuro = colorScheme === 'dark';\n\tconst cor = (nome: 'blue' | 'yellow' | 'red' | 'green') =>\n\t\tescuro ? theme.colors[nome][8] : theme.colors[nome][4];\n\n\treturn (\n\t\t<Group gap={1} wrap=\"nowrap\">\n\t\t\t{before?.(row)}\n\t\t\t<ActionIcon variant=\"transparent\" onClick={() => onView(row)}>\n\t\t\t\t<IconEye size={20} color={cor('blue')} />\n\t\t\t</ActionIcon>\n\t\t\t<ActionIcon variant=\"transparent\" onClick={() => onEdit(row)}>\n\t\t\t\t<IconEdit size={20} color={cor('yellow')} />\n\t\t\t</ActionIcon>\n\t\t\t<ActionIcon variant=\"transparent\" onClick={() => onRemove(row)}>\n\t\t\t\t<IconTrashX size={20} color={cor('red')} />\n\t\t\t</ActionIcon>\n\t\t\t<Tooltip withinPortal withArrow position=\"left\" label={`${t('archbase:Edit permissions')}`}>\n\t\t\t\t<ActionIcon variant=\"transparent\" onClick={onEditPermissions}>\n\t\t\t\t\t<IconShieldCheckered size={20} color={cor('green')} />\n\t\t\t\t</ActionIcon>\n\t\t\t</Tooltip>\n\t\t\t{after?.(row)}\n\t\t</Group>\n\t);\n}\n","/**\n * A barra de ferramentas das abas de usuários, grupos e perfis: \"Novo\" e \"Editar permissões\".\n *\n * <p>A aba de tokens de acesso <b>não</b> usa este componente, de propósito: ela tem um botão\n * de revogar com estado desabilitado próprio, e forçá-la aqui produziria uma abstração com\n * mais exceções do que regra.\n */\nimport React from 'react';\nimport { Button, Flex, Group } from '@mantine/core';\nimport { IconEdit, IconPlus } from '@tabler/icons-react';\nimport type { TranslateFn } from './columns';\n\nexport interface SecurityToolbarActionsProps {\n\tonAdd: () => void;\n\tonEditPermissions: () => void;\n\tt: TranslateFn;\n}\n\nexport const SecurityToolbarActions = ({ onAdd, onEditPermissions, t }: SecurityToolbarActionsProps) => (\n\t<Flex justify={'space-between'} style={{ width: '50%' }}>\n\t\t<Group align=\"end\" gap={'4px'} wrap=\"nowrap\">\n\t\t\t<Button color={'green'} leftSection={<IconPlus />} onClick={onAdd}>\n\t\t\t\t{`${t('archbase:New')}`}\n\t\t\t</Button>\n\t\t\t<Button color={'blue'} leftSection={<IconEdit />} onClick={onEditPermissions}>\n\t\t\t\t{`${t('archbase:Edit permissions')}`}\n\t\t\t</Button>\n\t\t</Group>\n\t\t<Flex align={'flex-start'} justify={'flex-end'} style={{ width: '200px' }}></Flex>\n\t</Flex>\n);\n","/**\n * ArchbaseSecurityView — visão completa de usuários/grupos/permissões.\n * @status stable\n */\nimport { ARCHBASE_IOC_API_TYPE, builder, emit, processDetailErrorMessage, processErrorMessage, useValidationErrors } from '@archbase/core';\nimport { ArchbaseDataSource } from '@archbase/data';\n// import { ArchbaseCountdownProgress } from '@archbase/components'; // Temporarily disabled\nimport {\n\tuseArchbaseRemoteDataSourceV2,\n\tuseArchbaseRemoteServiceApi,\n\tuseArchbaseStore,\n} from '@archbase/data';\nimport { useArchbaseTheme, isBase64Validate, useArchbaseValidator } from '@archbase/core';\nimport { useArchbaseListContext } from '@archbase/components';\nimport { ArchbaseListCustomItemProps } from '@archbase/components';\nimport { ArchbaseDialog, ArchbaseNotifications } from '@archbase/components';\nimport {\n\tActionIcon,\n\tBadge,\n\tButton,\n\tFlex,\n\tGroup,\n\tPaper,\n\tTabs,\n\tText,\n\tTooltip,\n\tuseMantineColorScheme,\n} from '@mantine/core';\nimport { IconEdit, IconPlus, IconShieldCheckered, IconTrashX } from '@tabler/icons-react';\n// Importações da DataGrid\nimport { ArchbaseDataGridColumn } from '@archbase/components';\nimport { ArchbaseDataGrid, ArchbaseDataGridRef, Columns } from '@archbase/components';\nimport { useArchbaseTranslation } from '@archbase/core';\nimport React, { ReactNode, useEffect, useRef, useState } from 'react';\nimport { ArchbaseAccessTokenService } from '@archbase/security';\nimport { ArchbaseGroupService } from '@archbase/security';\nimport { ArchbaseProfileService } from '@archbase/security';\nimport { ArchbaseResourceService } from '@archbase/security';\nimport { ArchbaseUserService } from '@archbase/security';\nimport { GroupModal, GroupModalOptions } from './GroupModal';\nimport { PermissionsSelectorModal } from './PermissionsSelectorModal';\nimport { ProfileModal, ProfileModalOptions } from './ProfileModal';\nimport { AccessTokenDto, GroupDto, ProfileDto, ResourceDto, UserDto } from '@archbase/security';\nimport { SecurityType } from '@archbase/security';\nimport { UserModal, UserModalOptions } from './UserModal';\nimport { IconEye } from '@tabler/icons-react';\n\nimport {\n\tNO_USER,\n\trenderGroups,\n\trenderProfile,\n\tUserItem,\n\ttype ArchbaseSecurityManagerProps,\n\ttype ArchbaseSecurityProps,\n\ttype UserItemProps,\n\tSecurityGridPanel,\n\tSecurityRowActions,\n\tSecurityToolbarActions,\n\tuseSecurityEntityActions,\n\tbuildAccessTokenColumns,\n\tbuildGroupColumns,\n\tbuildProfileColumns,\n\tbuildResourceColumns,\n\tbuildUserColumns,\n} from './securityView';\n\n// Reexportados daqui porque eram declarados neste arquivo antes da separação: quem já\n// importava estes nomes de 'ArchbaseSecurityView' continua importando.\nexport { NO_USER, UserItem, renderGroups, renderProfile };\nexport type { ArchbaseSecurityProps, ArchbaseSecurityManagerProps, UserItemProps };\n\nexport function ArchbaseSecurityView({\n\theight = '400px',\n\twidth = '100%',\n\tcreateEntitiesWithId = true,\n\tuserModalOptions,\n\tprofileModalOptions,\n\tgroupModalOptions,\n\toptions,\n}: ArchbaseSecurityManagerProps) {\n\tconst theme = useArchbaseTheme();\n\tconst templateStore = useArchbaseStore('securityStore');\n\tconst validator = useArchbaseValidator();\n\tconst { colorScheme } = useMantineColorScheme();\n\tconst [error, setError] = useState<string | undefined>(undefined);\n\tconst [activeTab, setActiveTab] = useState<string | null>('users');\n\tconst userApi = useArchbaseRemoteServiceApi<ArchbaseUserService>(ARCHBASE_IOC_API_TYPE.User);\n\tconst groupApi = useArchbaseRemoteServiceApi<ArchbaseGroupService>(ARCHBASE_IOC_API_TYPE.Group);\n\tconst resourceApi = useArchbaseRemoteServiceApi<ArchbaseResourceService>(ARCHBASE_IOC_API_TYPE.Resource);\n\tconst profileApi = useArchbaseRemoteServiceApi<ArchbaseProfileService>(ARCHBASE_IOC_API_TYPE.Profile);\n\tconst [openedModal, setOpenedModal] = useState<string>('');\n\tconst [openedPermissionsModal, setOpenedPermissionsModal] = useState<string>('');\n\tconst accessTokenApi = useArchbaseRemoteServiceApi<ArchbaseAccessTokenService>(ARCHBASE_IOC_API_TYPE.AccessToken);\n\tconst {t} = useArchbaseTranslation();\n\n\t// Referências para os grids\n\tconst usersGridRef = useRef<ArchbaseDataGridRef | null>(null);\n\tconst groupsGridRef = useRef<ArchbaseDataGridRef | null>(null);\n\tconst profilesGridRef = useRef<ArchbaseDataGridRef | null>(null);\n\tconst resourcesGridRef = useRef<ArchbaseDataGridRef | null>(null);\n\tconst accessTokensGridRef = useRef<ArchbaseDataGridRef | null>(null);\n\n\t// Função para obter o ID da linha\n\tconst getUserRowId = (row: UserDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst getGroupRowId = (row: GroupDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst getProfileRowId = (row: ProfileDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst getResourceRowId = (row: ResourceDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst getAccessTokenRowId = (row: AccessTokenDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst {\n\t\tdataSource: dsAccessTokens,\n\t\tisLoading: isLoadingAccessTokens,\n\t\trefreshData: refreshAccessTokens\n\t} = useArchbaseRemoteDataSourceV2<AccessTokenDto>({\n\t\tname: 'accessTokenApi',\n\t\tservice: accessTokenApi,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tdefaultSortFields: ['user.email', 'expirationTime:desc'],\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst {\n\t\tdataSource: dsUsers,\n\t\tisLoading: isLoadingUsers,\n\t\trefreshData: refreshUsers\n\t} = useArchbaseRemoteDataSourceV2<UserDto>({\n\t\tname: 'dsUsers',\n\t\tservice: userApi,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst {\n\t\tdataSource: dsGroups,\n\t\tisLoading: isLoadingGroups,\n\t\trefreshData: refreshGroups\n\t} = useArchbaseRemoteDataSourceV2<GroupDto>({\n\t\tname: 'dsGroups',\n\t\tservice: groupApi,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst {\n\t\tdataSource: dsProfiles,\n\t\tisLoading: isLoadingProfiles,\n\t\trefreshData: refreshProfiles\n\t} = useArchbaseRemoteDataSourceV2<ProfileDto>({\n\t\tname: 'dsProfile',\n\t\tservice: profileApi,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst {\n\t\tdataSource: dsResources,\n\t\tisLoading: isLoadingResources,\n\t\trefreshData: refreshResources\n\t} = useArchbaseRemoteDataSourceV2<ResourceDto>({\n\t\tname: 'dsResources',\n\t\tservice: resourceApi,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\t// Carregar dados iniciais\n\tuseEffect(() => {\n\t\t// AccessTokens with filter\n\t\trefreshAccessTokens({ filter: emit(builder.eq('revoked', 'false')) });\n\t\t// Other data sources\n\t\trefreshUsers();\n\t\trefreshGroups();\n\t\trefreshProfiles();\n\t\trefreshResources();\n\t}, []);\n\n\t// Colunas em securityView/columns.tsx — ver o porquê no cabeçalho daquele arquivo.\n\tconst accessTokenColumns = buildAccessTokenColumns(t);\n\tconst userColumns = buildUserColumns(t);\n\tconst groupColumns = buildGroupColumns(t);\n\tconst profileColumns = buildProfileColumns(t);\n\tconst resourceColumns = buildResourceColumns(t);\n\n\tconst validationContext = useValidationErrors();\n\n\t// Os gestos de cada entidade saem do mesmo hook. As cinco famílias de handler que\n\t// existiam aqui divergiam em detalhes que compilam igual — ver o cabeçalho de\n\t// securityView/useSecurityEntityActions.\n\tconst userActions = useSecurityEntityActions<UserDto>({\n\t\tdataSource: dsUsers,\n\t\tsecurityType: SecurityType.USER,\n\t\tnewInstance: () => UserDto.newInstance(),\n\t\tcreateEntitiesWithId,\n\t\tremoveMessageKey: 'archbase:Deseja remover o usuário ',\n\t\tsetOpenedModal,\n\t\tsetOpenedPermissionsModal,\n\t\tvalidationContext,\n\t\tt,\n\t});\n\n\tconst groupActions = useSecurityEntityActions<GroupDto>({\n\t\tdataSource: dsGroups,\n\t\tsecurityType: SecurityType.GROUP,\n\t\tnewInstance: () => GroupDto.newInstance(),\n\t\tcreateEntitiesWithId,\n\t\tremoveMessageKey: 'archbase:Deseja remover o grupo ',\n\t\tsetOpenedModal,\n\t\tsetOpenedPermissionsModal,\n\t\tvalidationContext,\n\t\tt,\n\t});\n\n\tconst profileActions = useSecurityEntityActions<ProfileDto>({\n\t\tdataSource: dsProfiles,\n\t\tsecurityType: SecurityType.PROFILE,\n\t\tnewInstance: () => ProfileDto.newInstance(),\n\t\tcreateEntitiesWithId,\n\t\tremoveMessageKey: 'archbase:Deseja remover o perfil ',\n\t\tsetOpenedModal,\n\t\tsetOpenedPermissionsModal,\n\t\tvalidationContext,\n\t\tt,\n\t});\n\n\tconst buildUserRowActions = (row: UserDto): ReactNode => (\n\t\t<SecurityRowActions<UserDto>\n\t\t\trow={row}\n\t\t\tonView={userActions.handleViewRow}\n\t\t\tonEdit={userActions.handleEditRow}\n\t\t\tonRemove={userActions.handleRemoveRow}\n\t\t\tonEditPermissions={userActions.handleOpenPermissionsModal}\n\t\t\tbefore={options?.beforeDefaultUserActions}\n\t\t\tafter={options?.afterDefaultUserActions}\n\t\t\tt={t}\n\t\t/>\n\t);\n\n\tconst buildGroupRowActions = (row: GroupDto): ReactNode => (\n\t\t<SecurityRowActions<GroupDto>\n\t\t\trow={row}\n\t\t\tonView={groupActions.handleViewRow}\n\t\t\tonEdit={groupActions.handleEditRow}\n\t\t\tonRemove={groupActions.handleRemoveRow}\n\t\t\tonEditPermissions={groupActions.handleOpenPermissionsModal}\n\t\t\tbefore={options?.beforeDefaultGroupActions}\n\t\t\tafter={options?.afterDefaultGroupActions}\n\t\t\tt={t}\n\t\t/>\n\t);\n\n\tconst buildProfileRowActions = (row: ProfileDto): ReactNode => (\n\t\t<SecurityRowActions<ProfileDto>\n\t\t\trow={row}\n\t\t\tonView={profileActions.handleViewRow}\n\t\t\tonEdit={profileActions.handleEditRow}\n\t\t\tonRemove={profileActions.handleRemoveRow}\n\t\t\tonEditPermissions={profileActions.handleOpenPermissionsModal}\n\t\t\tbefore={options?.beforeDefaultProfileActions}\n\t\t\tafter={options?.afterDefaultProfileActions}\n\t\t\tt={t}\n\t\t/>\n\t);\n\n\n\tconst handleAccessTokenRevokeRow = () => {\n\t\tconst currentAccessToken = dsAccessTokens.getCurrentRecord();\n\t\tif (currentAccessToken) {\n\t\t\tArchbaseDialog.showConfirmDialogYesNo(\n\t\t\t\t`${t('archbase:Confirme')}`,\n\t\t\t\t`${t('archbase:Deseja revogar o token de Acesso do usuário ')}${currentAccessToken.user.name} ?`,\n\t\t\t\tasync () => {\n\t\t\t\t\tawait accessTokenApi\n\t\t\t\t\t\t.revoke(currentAccessToken.token)\n\t\t\t\t\t\t.then(async () => {\n\t\t\t\t\t\t\tArchbaseNotifications.showSuccess(\n\t\t\t\t\t\t\t\t`${t('mentors:Informação')}`,\n\t\t\t\t\t\t\t\t`${t('mentors:Token de Acesso revogado com sucesso!')}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tdsAccessTokens.refreshData();\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t\tArchbaseDialog.showErrorWithDetails(\n\t\t\t\t\t\t\t\t`${t('mentors:Atenção')}`,\n\t\t\t\t\t\t\t\tprocessErrorMessage(error),\n\t\t\t\t\t\t\t\tprocessDetailErrorMessage(error),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t() => {},\n\t\t\t);\n\t\t}\n\t};\n\n\tconst handleClosePermissionsModal = () => {\n\t\tsetOpenedPermissionsModal('');\n\t};\n\n\t// Componentes de ações da barra de ferramentas para cada grid\n\tconst renderAccessTokensToolbarActions = () : ReactNode => {\n\t\treturn (\n\t\t\t<Flex justify={'space-between'} style={{ width: '50%' }}>\n\t\t\t\t<Group align=\"start\" gap={'4px'} wrap='nowrap'>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tdisabled={!dsAccessTokens.getCurrentRecord()}\n\t\t\t\t\t\tcolor={'red'}\n\t\t\t\t\t\tleftSection={<IconTrashX />}\n\t\t\t\t\t\tonClick={handleAccessTokenRevokeRow}\n\t\t\t\t\t>\n\t\t\t\t\t\t{`${t('archbase:Revoke')}`}\n\t\t\t\t\t</Button>\n\t\t\t\t</Group>\n\t\t\t</Flex>\n\t\t);\n\t};\n\n\treturn (\n\t\t<Paper p=\"md\" style={{ height: height, display: 'flex', flexDirection: 'column' }}>\n\t\t\t<Tabs variant='pills' value={activeTab} onChange={setActiveTab}>\n\t\t\t\t<Tabs.List>\n\t\t\t\t\t<Tabs.Tab value=\"users\">{`${t('Usuários')}`}</Tabs.Tab>\n\t\t\t\t\t<Tabs.Tab value=\"groups\">{`${t('Grupos')}`}</Tabs.Tab>\n\t\t\t\t\t<Tabs.Tab value=\"profiles\">{`${t('Perfis')}`}</Tabs.Tab>\n\t\t\t\t\t<Tabs.Tab value=\"resources\">{`${t('Recursos')}`}</Tabs.Tab>\n\t\t\t\t\t<Tabs.Tab value=\"accessTokens\">{`${t('Tokens Acesso')}`}</Tabs.Tab>\n\t\t\t\t</Tabs.List>\n\t\t\t</Tabs>\n\t\t\t<SecurityGridPanel<UserDto>\n\t\t\t\tactive={activeTab === 'users'}\n\t\t\t\tprintTitle={'Usuários'}\n\t\t\t\tgridRef={usersGridRef}\n\t\t\t\tdataSource={dsUsers}\n\t\t\t\tisLoading={isLoadingUsers}\n\t\t\t\terror={error}\n\t\t\t\tgetRowId={getUserRowId}\n\t\t\t\tstriped={true}\n\t\t\t\ttoolbarLeftContent={\n\t\t\t\t\t<SecurityToolbarActions\n\t\t\t\t\t\tonAdd={userActions.handleAdd}\n\t\t\t\t\t\tonEditPermissions={userActions.handleOpenPermissionsModal}\n\t\t\t\t\t\tt={t}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\trenderRowActions={buildUserRowActions}\n\t\t\t\tactionsColumnWidth={options?.userActionsColumnWidth}\n\t\t\t\tchildren={userColumns}\n\t\t\t/>\n\t\t\t<SecurityGridPanel<GroupDto>\n\t\t\t\tactive={activeTab === 'groups'}\n\t\t\t\tprintTitle={'Grupos'}\n\t\t\t\tgridRef={groupsGridRef}\n\t\t\t\tdataSource={dsGroups}\n\t\t\t\tisLoading={isLoadingGroups}\n\t\t\t\terror={error}\n\t\t\t\tgetRowId={getGroupRowId}\n\t\t\t\ttoolbarLeftContent={\n\t\t\t\t\t<SecurityToolbarActions\n\t\t\t\t\t\tonAdd={groupActions.handleAdd}\n\t\t\t\t\t\tonEditPermissions={groupActions.handleOpenPermissionsModal}\n\t\t\t\t\t\tt={t}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\trenderRowActions={buildGroupRowActions}\n\t\t\t\tactionsColumnWidth={options?.groupActionsColumnWidth}\n\t\t\t\tchildren={groupColumns}\n\t\t\t/>\n\t\t\t<SecurityGridPanel<ProfileDto>\n\t\t\t\tactive={activeTab === 'profiles'}\n\t\t\t\tprintTitle={'Perfis'}\n\t\t\t\tgridRef={profilesGridRef}\n\t\t\t\tdataSource={dsProfiles}\n\t\t\t\tisLoading={isLoadingProfiles}\n\t\t\t\terror={error}\n\t\t\t\tgetRowId={getProfileRowId}\n\t\t\t\ttoolbarLeftContent={\n\t\t\t\t\t<SecurityToolbarActions\n\t\t\t\t\t\tonAdd={profileActions.handleAdd}\n\t\t\t\t\t\tonEditPermissions={profileActions.handleOpenPermissionsModal}\n\t\t\t\t\t\tt={t}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\trenderRowActions={buildProfileRowActions}\n\t\t\t\tactionsColumnWidth={options?.profileActionsColumnWidth}\n\t\t\t\tchildren={profileColumns}\n\t\t\t/>\n\t\t\t<SecurityGridPanel<ResourceDto>\n\t\t\t\tactive={activeTab === 'resources'}\n\t\t\t\tprintTitle={'Recursos'}\n\t\t\t\tgridRef={resourcesGridRef}\n\t\t\t\tdataSource={dsResources}\n\t\t\t\tisLoading={isLoadingResources}\n\t\t\t\terror={error}\n\t\t\t\tgetRowId={getResourceRowId}\n\t\t\t\tenableRowActions={false}\n\t\t\t\tchildren={resourceColumns}\n\t\t\t/>\n\t\t\t<SecurityGridPanel<AccessTokenDto>\n\t\t\t\tactive={activeTab === 'accessTokens'}\n\t\t\t\tprintTitle={'Tokens de API'}\n\t\t\t\tgridRef={accessTokensGridRef}\n\t\t\t\tdataSource={dsAccessTokens}\n\t\t\t\tisLoading={isLoadingAccessTokens}\n\t\t\t\terror={error}\n\t\t\t\tgetRowId={getAccessTokenRowId}\n\t\t\t\tstriped={true}\n\t\t\t\tenableRowActions={false}\n\t\t\t\ttoolbarLeftContent={renderAccessTokensToolbarActions()}\n\t\t\t\tchildren={accessTokenColumns}\n\t\t\t/>\n\t\t\t{openedModal === SecurityType.USER ? (\n\t\t\t\t<UserModal\n\t\t\t\t\tonClickOk={userActions.handleSaveModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dsUsers}\n\t\t\t\t\tonClickCancel={userActions.handleCancelModal}\n\t\t\t\t\toptions={userModalOptions}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{openedModal === SecurityType.GROUP ? (\n\t\t\t\t<GroupModal\n\t\t\t\t\tonClickOk={groupActions.handleSaveModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dsGroups}\n\t\t\t\t\tonClickCancel={groupActions.handleCancelModal}\n\t\t\t\t\toptions={groupModalOptions}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{openedModal === SecurityType.PROFILE ? (\n\t\t\t\t<ProfileModal\n\t\t\t\t\tonClickOk={profileActions.handleSaveModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dsProfiles}\n\t\t\t\t\tonClickCancel={profileActions.handleCancelModal}\n\t\t\t\t\toptions={profileModalOptions}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{openedPermissionsModal === SecurityType.USER?\n\t\t\t<PermissionsSelectorModal\n\t\t\t\tdataSource={dsUsers}\n\t\t\t\topened={!!openedPermissionsModal}\n\t\t\t\tclose={handleClosePermissionsModal}\n\t\t\t/>:null}\n\t\t\t{openedPermissionsModal === SecurityType.GROUP?\n\t\t\t<PermissionsSelectorModal\n\t\t\t\tdataSource={dsGroups}\n\t\t\t\topened={!!openedPermissionsModal}\n\t\t\t\tclose={handleClosePermissionsModal}\n\t\t\t/>:null}\n\t\t\t{openedPermissionsModal === SecurityType.PROFILE?\n\t\t\t<PermissionsSelectorModal\n\t\t\t\tdataSource={dsProfiles}\n\t\t\t\topened={!!openedPermissionsModal}\n\t\t\t\tclose={handleClosePermissionsModal}\n\t\t\t/>:null}\n\n\t\t</Paper>\n\t);\n}\n","/**\n * ArchbaseApiTokenView — listagem e gestão de tokens de API.\n * @status stable\n */\nimport { ARCHBASE_IOC_API_TYPE, getI18nextInstance, getNestedObjectValue, processDetailErrorMessage, processErrorMessage } from '@archbase/core';\nimport {\n\tuseArchbaseDataSource,\n\tuseArchbaseRemoteDataSource,\n\tuseArchbaseRemoteServiceApi,\n\tuseArchbaseStore,\n} from '@archbase/data';\nimport { useArchbaseTheme } from '@archbase/core';\nimport { useArchbaseV1V2Compatibility } from '@archbase/data';\nimport { ArchbaseDialog, ArchbaseNotifications } from '@archbase/components';\nimport {\n\tButton,\n\tText,\n\tFlex,\n\tGroup,\n\tPaper,\n\tuseMantineColorScheme,\n\tRingProgress,\n\tTooltip,\n\tBadge,\n} from '@mantine/core';\nimport {\n\tIconPlus,\n\tIconTrashX,\n} from '@tabler/icons-react';\nimport { useArchbaseTranslation } from '@archbase/core';\nimport { useRef, useState } from 'react';\nimport { ApiTokenModal } from './ApiTokenModal';\nimport { ArchbaseApiTokenService } from '@archbase/security';\nimport { NO_USER } from './ArchbaseSecurityView';\nimport { ApiTokenDto } from '@archbase/security';\nimport { ArchbaseDataGridColumn } from '@archbase/components';\nimport { ArchbaseDataGrid, ArchbaseDataGridRef, Columns } from '@archbase/components';\n// import { ArchbaseGridTemplateRef } from '@archbase/template'; // Removed to break circular dependency\n\n\ninterface ArchbaseApiTokenViewProps {\n\theight?: any;\n\twidth?: any;\n}\n\nexport function ArchbaseApiTokenView({ height = '400px', width = '100%' }: ArchbaseApiTokenViewProps) {\n\tconst theme = useArchbaseTheme();\n\tconst templateStore = useArchbaseStore('apiTokenStore');\n\tconst validator = { validateEntity: () => [] }; // Mock validator returning empty error array\n\tconst { colorScheme } = useMantineColorScheme();\n\tconst [error, setError] = useState<string | undefined>(undefined);\n\tconst apiTokenApi = useArchbaseRemoteServiceApi<ArchbaseApiTokenService>(ARCHBASE_IOC_API_TYPE.ApiToken);\n\tconst [openedModal, setOpenedModal] = useState<string>('');\n\tconst gridRef = useRef<ArchbaseDataGridRef | null>(null)\n \n\t// Função para obter o ID da linha\n\tconst getRowId = (row: ApiTokenDto): string => {\n\t\treturn row.id;\n\t};\n\n\tconst { dataSource } = useArchbaseDataSource<ApiTokenDto, string>({\n\t\tinitialData: [],\n\t\tname: 'dataSource',\n\t});\n\n\t// 🔄 MIGRAÇÃO V1/V2: Hooks de compatibilidade para DataSources\n\tconst localDataSourceV1V2 = useArchbaseV1V2Compatibility<ApiTokenDto>(\n\t\t'ArchbaseApiTokenView-LocalDataSource',\n\t\tdataSource,\n\t\tundefined,\n\t\tundefined\n\t);\n\n\tconst { dataSource: dsApiTokens, isLoading } = useArchbaseRemoteDataSource<ApiTokenDto, string>({\n\t\tname: 'dsApiToken',\n\t\tservice: apiTokenApi,\n\t\tstore: templateStore,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tloadOnStart: true,\n\t\tonLoadComplete: (dataSource) => {\n\t\t\t//\n\t\t},\n\t\tonDestroy: (dataSource) => {\n\t\t\t//\n\t\t},\n\t\tonError: (error, origin) => {\n\t\t\tsetError(error);\n\t\t\tArchbaseNotifications.showError(getI18nextInstance().t('archbase:WARNING'), error, origin);\n\t\t},\n\t});\n\n\t// 🔄 MIGRAÇÃO V1/V2: Hook de compatibilidade para DataSource remoto\n\tconst remoteDataSourceV1V2 = useArchbaseV1V2Compatibility<ApiTokenDto>(\n\t\t'ArchbaseApiTokenView-RemoteDataSource',\n\t\tdsApiTokens,\n\t\tundefined,\n\t\tundefined\n\t);\n\n\tconst heightTab = `calc(${height} - 40px)`;\n\n\tconst columns = (\n\t\t<Columns>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"user.avatar\"\n\t\t\t\tdataType=\"image\"\n\t\t\t\tsize={80}\n\t\t\t\theader=\"Foto\"\n\t\t\t\trender={(data) => (\n\t\t\t\t\t<img\n\t\t\t\t\t\tstyle={{ borderRadius: 50, height: '32px', maxHeight: '32px' }}\n\t\t\t\t\t\tsrc={\n\t\t\t\t\t\t\tdata.row.user && data.row.user.avatar ? atob(data.row.user.avatar) : NO_USER\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t\talign=\"center\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"user.userName\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\tsize={300}\n\t\t\t\theader=\"Nome de Usuário\"\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"user.email\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Email\"\n\t\t\t\tsize={240}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"name\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Nome\"\n\t\t\t\tsize={240}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"description\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Descrição\"\n\t\t\t\tsize={300}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"token\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Token API\"\n\t\t\t\tsize={300}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t\tenableClickToCopy={true}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"tenantId\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Tenant ID\"\n\t\t\t\tsize={300}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t\tenableClickToCopy={true}\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"expirationDate\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\tsize={240}\n\t\t\t\theader=\"Validade\"\n\t\t\t\trender={(data) => {\n\t\t\t\t\tif (!data.row.expirationDate) {\n\t\t\t\t\t\treturn <Text c=\"dimmed\">Sem expiração</Text>;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst today = new Date();\n\t\t\t\t\ttoday.setHours(0, 0, 0, 0);\n\t\t\t\t\tconst expDate = new Date(data.row.expirationDate);\n\t\t\t\t\texpDate.setHours(0, 0, 0, 0);\n\n\t\t\t\t\tconst diffTime = expDate.getTime() - today.getTime();\n\t\t\t\t\tconst diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n\t\t\t\t\t// Calcular porcentagem para o gauge (baseado em 365 dias)\n\t\t\t\t\tconst maxDays = 365;\n\t\t\t\t\tlet percentage = Math.max(0, Math.min(100, (diffDays / maxDays) * 100));\n\n\t\t\t\t\t// Determinar cor baseado nos dias restantes\n\t\t\t\t\tlet color = 'green';\n\t\t\t\t\tlet label = '';\n\n\t\t\t\t\tif (diffDays < 0) {\n\t\t\t\t\t\t// Token vencido\n\t\t\t\t\t\tcolor = 'red';\n\t\t\t\t\t\tpercentage = 100;\n\t\t\t\t\t\tlabel = `Vencido há ${Math.abs(diffDays)} dia${Math.abs(diffDays) !== 1 ? 's' : ''}`;\n\t\t\t\t\t} else if (diffDays === 0) {\n\t\t\t\t\t\tcolor = 'red';\n\t\t\t\t\t\tpercentage = 5;\n\t\t\t\t\t\tlabel = 'Vence hoje';\n\t\t\t\t\t} else if (diffDays <= 7) {\n\t\t\t\t\t\tcolor = 'red';\n\t\t\t\t\t\tlabel = `${diffDays} dia${diffDays !== 1 ? 's' : ''}`;\n\t\t\t\t\t} else if (diffDays <= 30) {\n\t\t\t\t\t\tcolor = 'orange';\n\t\t\t\t\t\tlabel = `${diffDays} dias`;\n\t\t\t\t\t} else if (diffDays <= 90) {\n\t\t\t\t\t\tcolor = 'yellow';\n\t\t\t\t\t\tlabel = `${diffDays} dias`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcolor = 'green';\n\t\t\t\t\t\tlabel = `${diffDays} dias`;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst tooltipText = diffDays < 0\n\t\t\t\t\t\t? `Vencido em ${expDate.toLocaleDateString()}`\n\t\t\t\t\t\t: `Expira em ${expDate.toLocaleDateString()}`;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Tooltip label={tooltipText} withArrow>\n\t\t\t\t\t\t\t<Group gap=\"xs\" wrap=\"nowrap\">\n\t\t\t\t\t\t\t\t<RingProgress\n\t\t\t\t\t\t\t\t\tsize={36}\n\t\t\t\t\t\t\t\t\tthickness={4}\n\t\t\t\t\t\t\t\t\troundCaps\n\t\t\t\t\t\t\t\t\tsections={[{ value: diffDays < 0 ? 100 : percentage, color }]}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Text size=\"sm\" c={diffDays < 0 ? 'red' : undefined} fw={diffDays <= 7 ? 600 : undefined}>\n\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</Group>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t);\n\t\t\t\t}}\n\t\t\t\tinputFilterType=\"text\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"activated\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader=\"Ativado ?\"\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t/>\n\t\t\t<ArchbaseDataGridColumn<ApiTokenDto>\n\t\t\t\tdataField=\"revoked\"\n\t\t\t\tdataType=\"boolean\"\n\t\t\t\theader=\"Revogado ?\"\n\t\t\t\tinputFilterType=\"checkbox\"\n\t\t\t/>\n\t\t</Columns>\n\t);\n\n\tconst handleCreateApiTokenExecute = () => {\n\t\t// 🔄 MIGRAÇÃO V1/V2: Inserção com compatibilidade\n\t\tdataSource.insert(ApiTokenDto.newInstance());\n\t\t\n\t\t// Se for V1, forçar atualização\n\t\tif (dataSource && !localDataSourceV1V2.isDataSourceV2) {\n\t\t\tlocalDataSourceV1V2.v1State.forceUpdate();\n\t\t}\n\t\t\n\t\tsetOpenedModal('apiToken');\n\t};\n\n\tconst handleApiTokenRevokeRow = () => {\n\t\tif (dsApiTokens.getCurrentRecord()) {\n\t\t\tArchbaseDialog.showConfirmDialogYesNo(\n\t\t\t\t`${getI18nextInstance().t('archbase:Confirme')}`,\n\t\t\t\t`${getI18nextInstance().t('archbase:Deseja revogar o token de API do usuário ')}${dsApiTokens.getCurrentRecord().user.name} ?`,\n\t\t\t\tasync () => {\n\t\t\t\t\tawait apiTokenApi\n\t\t\t\t\t\t.revoke(dsApiTokens.getCurrentRecord().token)\n\t\t\t\t\t\t.then(async () => {\n\t\t\t\t\t\t\tArchbaseNotifications.showSuccess(\n\t\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Informação')}`,\n\t\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Token de API revogado com sucesso!')}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// 🔄 MIGRAÇÃO V1/V2: Refresh com compatibilidade\n\t\t\t\t\t\t\tdsApiTokens.refreshData();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Se for V1, forçar atualização\n\t\t\t\t\t\t\tif (dsApiTokens && !remoteDataSourceV1V2.isDataSourceV2) {\n\t\t\t\t\t\t\t\tremoteDataSourceV1V2.v1State.forceUpdate();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t\tArchbaseDialog.showErrorWithDetails(\n\t\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Atenção')}`,\n\t\t\t\t\t\t\t\tprocessErrorMessage(error),\n\t\t\t\t\t\t\t\tprocessDetailErrorMessage(error),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t() => { },\n\t\t\t);\n\t\t}\n\t};\n\n\tconst handleCloseApiTokenModal = () => {\n\t\tsetOpenedModal('');\n\t};\n\n\tconst handleSaveApiToken = async (record?: ApiTokenDto, callback?: Function) => {\n\t\tconst apiToken: ApiTokenDto | undefined = dataSource.getCurrentRecord();\n\t\tif (apiToken) {\n\t\t\ttry {\n\t\t\t\tdataSource.validate();\n\t\t\t\tif (!apiToken.user || !apiToken.user.email) {\n\t\t\t\t\tArchbaseDialog.showErrorWithDetails(\n\t\t\t\t\t\t`${getI18nextInstance().t('archbase:WARNING')}`,\n\t\t\t\t\t\t`${getI18nextInstance().t('archbase:Selecione um usuário para o token de API')}`,\n\t\t\t\t\t\t'',\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait apiTokenApi\n\t\t\t\t\t.create(apiToken.user.email, apiToken.expirationDate, apiToken.name, apiToken.description)\n\t\t\t\t\t.then(async (response: ApiTokenDto) => {\n\t\t\t\t\t\t// 🔄 MIGRAÇÃO V1/V2: Cancelar e adicionar com compatibilidade\n\t\t\t\t\t\tdataSource.cancel();\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Se for V1, forçar atualização no local DataSource\n\t\t\t\t\t\tif (dataSource && !localDataSourceV1V2.isDataSourceV2) {\n\t\t\t\t\t\t\tlocalDataSourceV1V2.v1State.forceUpdate();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tdsApiTokens.append(response);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Se for V1, forçar atualização no remote DataSource\n\t\t\t\t\t\tif (dsApiTokens && !remoteDataSourceV1V2.isDataSourceV2) {\n\t\t\t\t\t\t\tremoteDataSourceV1V2.v1State.forceUpdate();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tArchbaseNotifications.showSuccess(\n\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Informação')}`,\n\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Token de API gerado com sucesso!')}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tcallback(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tArchbaseDialog.showErrorWithDetails(\n\t\t\t\t\t\t\t`${getI18nextInstance().t('mentors:Atenção')}`,\n\t\t\t\t\t\t\tprocessErrorMessage(error),\n\t\t\t\t\t\t\tprocessDetailErrorMessage(error),\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t} catch (ex) {\n\t\t\t\tArchbaseDialog.showErrorWithDetails(\n\t\t\t\t\t`${getI18nextInstance().t('mentors:Atenção')}`,\n\t\t\t\t\tprocessErrorMessage(ex),\n\t\t\t\t\tprocessDetailErrorMessage(ex),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t};\n\n\t// Componente de ações da barra de ferramentas\n\tconst renderToolbarActions = () => {\n\t\treturn (\n\t\t\t<Flex justify={'space-between'} style={{ width: '50%' }}>\n\t\t\t\t<Group align=\"start\" gap={'2px'} wrap=\"nowrap\">\n\t\t\t\t\t<Button color={'green'} leftSection={<IconPlus />} onClick={handleCreateApiTokenExecute}>\n\t\t\t\t\t\t{getI18nextInstance().t('archbase:New')}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button disabled={!dsApiTokens.getCurrentRecord()} color={'red'} leftSection={<IconTrashX />} onClick={handleApiTokenRevokeRow}>\n\t\t\t\t\t\t{getI18nextInstance().t('archbase:Revoke')}\n\t\t\t\t\t</Button>\n\t\t\t\t</Group>\n\t\t\t</Flex>\n\t\t);\n\t};\n\n\treturn (\n\t\t<Paper p=\"md\" style={{ height: height, display: 'flex', flexDirection: 'column' }}>\n\t\t\t<Paper\n\t\t\t\twithBorder\n\t\t\t\tstyle={{\n\t\t\t\t\theight: heightTab,\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\tflex: 1,\n\t\t\t\t\tminHeight: 0,\n\t\t\t\t\toverflow: 'auto'\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ArchbaseDataGrid<ApiTokenDto, string>\n\t\t\t\t\tgridRef={gridRef}\n\t\t\t\t\tprintTitle={'Tokens de API'}\n\t\t\t\t\twidth={'100%'}\n\t\t\t\t\theight={'100%'}\n\t\t\t\t\twithBorder={false}\n\t\t\t\t\tdataSource={dsApiTokens}\n\t\t\t\t\twithColumnBorders={true}\n\t\t\t\t\tstriped={true}\n\t\t\t\t\tenableTopToolbar={true}\n\t\t\t\t\tenableRowActions={false}\n\t\t\t\t\tpageSize={50}\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\tisError={!!error}\n\t\t\t\t\terror={error}\n\t\t\t\t\tenableGlobalFilter={true}\n\t\t\t\t\tgetRowId={getRowId}\n\t\t\t\t\ttoolbarLeftContent={renderToolbarActions()}\n\t\t\t\t\tchildren={columns}\n\t\t\t\t/>\n\t\t\t</Paper>\n\t\t\t{openedModal === 'apiToken' ? (\n\t\t\t\t<ApiTokenModal\n\t\t\t\t\tonClickOk={handleCloseApiTokenModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dataSource}\n\t\t\t\t\tonCustomSave={handleSaveApiToken}\n\t\t\t\t\tonClickCancel={handleCloseApiTokenModal}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</Paper>\n\t);\n}\n","/**\n * Peças de apresentação compartilhadas pelas três abas do diagnóstico.\n *\n * <p>Ficam aqui, e não dentro de cada painel, porque são o que garante que um cartão vindo\n * de {@code additionalOverviewCards} saia idêntico a um cartão do framework. É a coerência\n * visual que faz valer a pena a aplicação entregar dado em vez de JSX.\n */\nimport React, { type ReactNode } from 'react';\nimport { Badge, Group, Paper, SimpleGrid, Stack, Text } from '@mantine/core';\nimport type {\n\tArchbaseDiagnosticAttribute,\n\tArchbaseDiagnosticCard,\n\tArchbaseDiagnosticFlag,\n\tArchbaseDiagnosticSeverity,\n} from './types';\n\n/** Cor semântica — separada do acento visual do tema, de propósito. */\nexport const severityColor = (severity: ArchbaseDiagnosticSeverity): string => {\n\tswitch (severity) {\n\t\tcase 'critical':\n\t\t\treturn 'red';\n\t\tcase 'warning':\n\t\t\treturn 'orange';\n\t\tcase 'ok':\n\t\t\treturn 'green';\n\t\tdefault:\n\t\t\treturn 'gray';\n\t}\n};\n\nexport interface MetricCardProps {\n\tcard: ArchbaseDiagnosticCard;\n}\n\n/** Cartão de métrica: valor grande, denominador, rótulo e o porquê importa. */\nexport const MetricCard = ({ card }: MetricCardProps) => (\n\t<Paper withBorder radius=\"md\" p=\"sm\" style={{ borderLeft: `3px solid var(--mantine-color-${severityColor(card.severity)}-6)` }}>\n\t\t<Stack gap={4}>\n\t\t\t<Group gap={8} align=\"baseline\" wrap=\"wrap\">\n\t\t\t\t<Text fw={600} size=\"1.7rem\" lh={1.05} c={severityColor(card.severity)}>\n\t\t\t\t\t{card.value}\n\t\t\t\t</Text>\n\t\t\t\t{card.of ? (\n\t\t\t\t\t<Text size=\"xs\" c=\"dimmed\">\n\t\t\t\t\t\t{card.of}\n\t\t\t\t\t</Text>\n\t\t\t\t) : null}\n\t\t\t</Group>\n\t\t\t<Text size=\"sm\" fw={550}>\n\t\t\t\t{card.label}\n\t\t\t</Text>\n\t\t\t{card.description ? (\n\t\t\t\t<Text size=\"xs\" c=\"dimmed\" lh={1.45}>\n\t\t\t\t\t{card.description}\n\t\t\t\t</Text>\n\t\t\t) : null}\n\t\t</Stack>\n\t</Paper>\n);\n\nexport interface MetricCardsProps {\n\tcards: ArchbaseDiagnosticCard[];\n}\n\nexport const MetricCards = ({ cards }: MetricCardsProps) => (\n\t<SimpleGrid cols={{ base: 1, sm: 2, lg: 3, xl: 4 }} spacing=\"xs\">\n\t\t{cards.map((card, index) => (\n\t\t\t<MetricCard key={`${card.label}-${index}`} card={card} />\n\t\t))}\n\t</SimpleGrid>\n);\n\nexport interface FlagStripProps {\n\tflags: ArchbaseDiagnosticFlag[];\n}\n\n/**\n * Faixa de proteções.\n *\n * <p>Vem antes dos números na tela porque contagem alta de permissões não significa nada se o\n * portão correspondente está inerte — e essa é a pergunta que o operador não sabe fazer.\n */\nexport const FlagStrip = ({ flags }: FlagStripProps) => (\n\t<SimpleGrid cols={{ base: 1, sm: 2, lg: 4 }} spacing=\"xs\">\n\t\t{flags.map((flag) => (\n\t\t\t<Paper key={flag.key} withBorder radius=\"md\" p=\"sm\">\n\t\t\t\t<Stack gap={3}>\n\t\t\t\t\t<Text size=\"10px\" c=\"dimmed\" ff=\"monospace\" style={{ wordBreak: 'break-all' }}>\n\t\t\t\t\t\t{flag.key}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Group gap={7} wrap=\"nowrap\">\n\t\t\t\t\t\t<Badge size=\"xs\" circle color={severityColor(flag.severity)} />\n\t\t\t\t\t\t<Text size=\"sm\" fw={550}>\n\t\t\t\t\t\t\t{flag.value}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Group>\n\t\t\t\t\t{flag.description ? (\n\t\t\t\t\t\t<Text size=\"xs\" c=\"dimmed\" lh={1.4}>\n\t\t\t\t\t\t\t{flag.description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : null}\n\t\t\t\t</Stack>\n\t\t\t</Paper>\n\t\t))}\n\t</SimpleGrid>\n);\n\nexport interface AttributeListProps {\n\tattributes: ArchbaseDiagnosticAttribute[];\n}\n\n/** Lista rótulo/valor — o layout onde entram perfil, grupos, nível e os atributos de negócio. */\nexport const AttributeList = ({ attributes }: AttributeListProps) => (\n\t<Stack gap={7}>\n\t\t{attributes.map((attribute, index) => (\n\t\t\t<Group key={`${attribute.label}-${index}`} gap={12} wrap=\"nowrap\" justify=\"space-between\">\n\t\t\t\t<Text size=\"sm\" c=\"dimmed\">\n\t\t\t\t\t{attribute.label}\n\t\t\t\t</Text>\n\t\t\t\t<Text size=\"sm\" fw={600} ta=\"right\">\n\t\t\t\t\t{attribute.value}\n\t\t\t\t</Text>\n\t\t\t</Group>\n\t\t))}\n\t</Stack>\n);\n\nexport interface SectionProps {\n\ttitle: string;\n\thint?: string;\n\tchildren: ReactNode;\n}\n\nexport const Section = ({ title, hint, children }: SectionProps) => (\n\t<Stack gap=\"xs\">\n\t\t<Group gap={10} align=\"baseline\" wrap=\"wrap\">\n\t\t\t<Text size=\"xs\" fw={650} tt=\"uppercase\" style={{ letterSpacing: '.05em' }}>\n\t\t\t\t{title}\n\t\t\t</Text>\n\t\t\t{hint ? (\n\t\t\t\t<Text size=\"xs\" c=\"dimmed\">\n\t\t\t\t\t{hint}\n\t\t\t\t</Text>\n\t\t\t) : null}\n\t\t</Group>\n\t\t{children}\n\t</Stack>\n);\n","/**\n * Panorama — o estado da segurança do tenant.\n *\n * <p>A ordem da tela é uma afirmação: as <b>proteções</b> vêm antes das contagens. Um número\n * alto de permissões não diz nada quando o portão correspondente está desligado, e essa é\n * exatamente a leitura que a auditoria mostrou faltar.\n */\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { Alert, Loader, Stack, Text } from '@mantine/core';\nimport { ARCHBASE_IOC_API_TYPE, processErrorMessage } from '@archbase/core';\nimport { useArchbaseRemoteServiceApi } from '@archbase/data';\nimport type { ArchbaseAccessOverview, ArchbaseSecurityDiagnosticsService } from '@archbase/security';\nimport { FlagStrip, MetricCards, Section } from './DiagnosticPrimitives';\nimport type { ArchbaseDiagnosticCard, ArchbaseDiagnosticFlag, ArchbaseSecurityDiagnosticsSlots } from './types';\n\nexport interface OverviewPanelProps {\n\tslots?: ArchbaseSecurityDiagnosticsSlots;\n\tonError?: (message: string) => void;\n}\n\nconst percent = (part: number, whole: number): string => (whole > 0 ? ` · ${Math.round((part / whole) * 100)}%` : '');\n\n/** As proteções configuráveis, traduzidas para \"ligado / desligado\" e o que isso custa. */\nconst buildFlags = (overview: ArchbaseAccessOverview): ArchbaseDiagnosticFlag[] => {\n\tconst flags = overview.flags;\n\treturn [\n\t\t{\n\t\t\tkey: 'archbase.security.access.require-active',\n\t\t\tlabel: 'Filtro de ativo',\n\t\t\tvalue: flags.requireActive ? 'Ligado' : 'Desligado',\n\t\t\tseverity: flags.requireActive ? 'ok' : 'critical',\n\t\t\tdescription: flags.requireActive\n\t\t\t\t? 'Permissão para ação inativa não decide.'\n\t\t\t\t: 'Permissão para ação inativa ainda decide.',\n\t\t},\n\t\t{\n\t\t\tkey: 'archbase.security.admin-endpoints.policy',\n\t\t\tlabel: 'Endpoints administrativos',\n\t\t\tvalue: flags.adminEndpointsPolicy,\n\t\t\tseverity: flags.adminEndpointsPolicy === 'permit' ? 'critical' : 'ok',\n\t\t\tdescription:\n\t\t\t\tflags.adminEndpointsPolicy === 'permit'\n\t\t\t\t\t? 'permit = qualquer autenticado administra segurança.'\n\t\t\t\t\t: 'Restrito.',\n\t\t},\n\t\t{\n\t\t\tkey: 'ArchbaseRoleResolver',\n\t\t\tlabel: 'Resolver de papel',\n\t\t\tvalue: flags.roleResolverRegistered ? 'Registrado' : 'Ausente',\n\t\t\tseverity: flags.roleResolverRegistered ? 'ok' : 'warning',\n\t\t\tdescription: flags.roleResolverRegistered\n\t\t\t\t? '@RequireRole é avaliado.'\n\t\t\t\t: '@RequireRole não restringe nada sem ele.',\n\t\t},\n\t\t{\n\t\t\tkey: 'scan',\n\t\t\tlabel: 'Varredura de capacidades',\n\t\t\tvalue: flags.scanConfigured ? 'Configurada' : 'Não configurada',\n\t\t\tseverity: flags.scanConfigured ? 'ok' : 'warning',\n\t\t\tdescription: flags.scanConfigured\n\t\t\t\t? 'O catálogo se alimenta do código.'\n\t\t\t\t: 'O catálogo não se alimenta do código.',\n\t\t},\n\t];\n};\n\nconst buildCards = (overview: ArchbaseAccessOverview): ArchbaseDiagnosticCard[] => [\n\t{\n\t\tseverity: 'critical',\n\t\tvalue: overview.permissionsPointingToInactive,\n\t\tof: `de ${overview.permissions}${percent(overview.permissionsPointingToInactive, overview.permissions)}`,\n\t\tlabel: 'Permissões inertes',\n\t\tdescription: 'Apontam para ação ou recurso inativo. É o acesso que o operador acredita ter concedido.',\n\t},\n\t{\n\t\tseverity: 'warning',\n\t\tvalue: overview.administrators,\n\t\tof: `de ${overview.users} usuários`,\n\t\tlabel: 'Administradores',\n\t\tdescription: 'Passam direto pelo portão GRANT. Nada configurado nesta tela se aplica a eles.',\n\t},\n\t{\n\t\tseverity: 'warning',\n\t\tvalue: overview.actionsInactive,\n\t\tof: `de ${overview.actions} ações`,\n\t\tlabel: 'Ações inativas',\n\t\tdescription: 'Capacidades do catálogo que não valem. São a origem das permissões inertes.',\n\t},\n\t{\n\t\tseverity: 'warning',\n\t\tvalue: overview.apiResourcesInactive,\n\t\tof: `de ${overview.apiResources} recursos API`,\n\t\tlabel: 'Recursos API desativados',\n\t\tdescription: 'Desativados pela varredura por não terem @HasPermission correspondente.',\n\t},\n\t{\n\t\tseverity: 'neutral',\n\t\tvalue: overview.resourcesWithoutAction,\n\t\tof: `de ${overview.resources} recursos`,\n\t\tlabel: 'Recursos sem ação',\n\t\tdescription: 'Telas ainda não abertas neste tenant. Indicador operacional, não alerta.',\n\t},\n\t{\n\t\tseverity: 'warning',\n\t\tvalue: overview.actionsWithoutPermission,\n\t\tof: 'ações',\n\t\tlabel: 'Ninguém tem',\n\t\tdescription: 'Capacidade existe no catálogo e não foi concedida a ninguém.',\n\t},\n];\n\nexport const OverviewPanel = ({ slots, onError }: OverviewPanelProps) => {\n\tconst api = useArchbaseRemoteServiceApi<ArchbaseSecurityDiagnosticsService>(\n\t\tARCHBASE_IOC_API_TYPE.SecurityDiagnostics,\n\t);\n\tconst [overview, setOverview] = useState<ArchbaseAccessOverview | undefined>(undefined);\n\tconst [loading, setLoading] = useState<boolean>(true);\n\tconst [error, setError] = useState<string | undefined>(undefined);\n\n\tuseEffect(() => {\n\t\tlet vivo = true;\n\t\tsetLoading(true);\n\t\tapi\n\t\t\t.getOverview()\n\t\t\t.then((resultado) => {\n\t\t\t\tif (vivo) {\n\t\t\t\t\tsetOverview(resultado);\n\t\t\t\t\tsetError(undefined);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((erro) => {\n\t\t\t\tif (vivo) {\n\t\t\t\t\tconst mensagem = processErrorMessage(erro);\n\t\t\t\t\tsetError(mensagem);\n\t\t\t\t\tonError?.(mensagem);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tif (vivo) {\n\t\t\t\t\tsetLoading(false);\n\t\t\t\t}\n\t\t\t});\n\t\treturn () => {\n\t\t\tvivo = false;\n\t\t};\n\t}, [api]);\n\n\tconst flags = useMemo(\n\t\t() => (overview ? [...buildFlags(overview), ...(slots?.additionalFlags?.(overview) ?? [])] : []),\n\t\t[overview, slots],\n\t);\n\tconst cards = useMemo(\n\t\t() => (overview ? [...buildCards(overview), ...(slots?.additionalOverviewCards?.(overview) ?? [])] : []),\n\t\t[overview, slots],\n\t);\n\n\tif (loading) {\n\t\treturn <Loader size=\"sm\" />;\n\t}\n\tif (error) {\n\t\treturn (\n\t\t\t<Alert color=\"red\" title=\"Não foi possível ler o diagnóstico\">\n\t\t\t\t{error}\n\t\t\t</Alert>\n\t\t);\n\t}\n\tif (!overview) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Stack gap=\"lg\">\n\t\t\t<Section title=\"Proteções\" hint=\"de AccessOverview.flags\">\n\t\t\t\t<FlagStrip flags={flags} />\n\t\t\t\t<Text size=\"xs\" c=\"dimmed\" lh={1.45}>\n\t\t\t\t\tTodas nascem com o padrão compatível — ligadas só quando alguém decide.\n\t\t\t\t</Text>\n\t\t\t</Section>\n\n\t\t\t<Section title=\"Catálogo e concessões\" hint=\"contagens vivas\">\n\t\t\t\t<MetricCards cards={cards} />\n\t\t\t</Section>\n\n\t\t\t{slots?.afterOverview?.(overview)}\n\t\t</Stack>\n\t);\n};\n","/**\n * Efetivo do usuário — o que a pessoa realmente pode, com a origem de cada concessão.\n *\n * <p>A coluna <b>Origem</b> é a razão de a tela existir: a consulta de autorização devolve\n * sim/não, e sem saber de onde veio o acesso o diagnóstico vira tentativa e erro.\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport { Alert, Badge, Button, Chip, Group, Loader, Paper, SimpleGrid, Stack, Table, Text, TextInput } from '@mantine/core';\nimport { ARCHBASE_IOC_API_TYPE, processErrorMessage } from '@archbase/core';\nimport { useArchbaseRemoteServiceApi } from '@archbase/data';\nimport type {\n\tArchbaseCapabilitySituation,\n\tArchbaseEffectiveAccessReport,\n\tArchbaseSecurityDiagnosticsService,\n} from '@archbase/security';\nimport { AttributeList, Section, severityColor } from './DiagnosticPrimitives';\nimport type { ArchbaseDiagnosticAttribute, ArchbaseSecurityDiagnosticsSlots } from './types';\n\nexport interface EffectiveAccessPanelProps {\n\tslots?: ArchbaseSecurityDiagnosticsSlots;\n\tonError?: (message: string) => void;\n}\n\ntype Filtro = 'all' | ArchbaseCapabilitySituation | 'inherited';\n\nconst SITUACAO: Record<ArchbaseCapabilitySituation, { label: string; color: string }> = {\n\tEFFECTIVE: { label: 'Efetiva', color: 'green' },\n\tINERT: { label: 'Inerte', color: 'orange' },\n\tDENIED: { label: 'Negada', color: 'red' },\n};\n\nconst ORIGEM: Record<string, string> = { GROUP: 'grupo', PROFILE: 'perfil', USER: 'direto' };\n\nconst FILTROS: Array<{ value: Filtro; label: string }> = [\n\t{ value: 'all', label: 'Todas' },\n\t{ value: 'EFFECTIVE', label: 'Só efetivas' },\n\t{ value: 'INERT', label: 'Só inertes' },\n\t{ value: 'DENIED', label: 'Negadas' },\n\t{ value: 'inherited', label: 'Só herdadas' },\n];\n\nexport const EffectiveAccessPanel = ({ slots, onError }: EffectiveAccessPanelProps) => {\n\tconst api = useArchbaseRemoteServiceApi<ArchbaseSecurityDiagnosticsService>(\n\t\tARCHBASE_IOC_API_TYPE.SecurityDiagnostics,\n\t);\n\tconst [busca, setBusca] = useState<string>('');\n\tconst [report, setReport] = useState<ArchbaseEffectiveAccessReport | undefined>(undefined);\n\tconst [loading, setLoading] = useState<boolean>(false);\n\tconst [error, setError] = useState<string | undefined>(undefined);\n\tconst [filtro, setFiltro] = useState<Filtro>('all');\n\n\tconst consultar = useCallback(\n\t\tasync (identificador: string) => {\n\t\t\tconst alvo = identificador.trim();\n\t\t\tif (!alvo) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetLoading(true);\n\t\t\tsetError(undefined);\n\t\t\ttry {\n\t\t\t\t// Um e-mail tem '@'; qualquer outra coisa é tratada como id.\n\t\t\t\tconst resultado = alvo.includes('@')\n\t\t\t\t\t? await api.getEffectiveAccessByEmail(alvo)\n\t\t\t\t\t: await api.getEffectiveAccessByUserId(alvo);\n\t\t\t\tsetReport(resultado);\n\t\t\t} catch (erro) {\n\t\t\t\tconst mensagem = processErrorMessage(erro);\n\t\t\t\tsetError(mensagem);\n\t\t\t\tonError?.(mensagem);\n\t\t\t\tsetReport(undefined);\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t},\n\t\t[api, onError],\n\t);\n\n\tconst atributos = useMemo<ArchbaseDiagnosticAttribute[]>(() => {\n\t\tif (!report) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [\n\t\t\t{ label: 'Perfil', value: report.profileName || '—' },\n\t\t\t{ label: 'Grupos', value: report.groupNames.length ? report.groupNames.join(', ') : '—' },\n\t\t\t...(slots?.userAttributes?.(report) ?? []),\n\t\t];\n\t}, [report, slots]);\n\n\tconst capacidades = useMemo(() => {\n\t\tif (!report) {\n\t\t\treturn [];\n\t\t}\n\t\tif (filtro === 'all') {\n\t\t\treturn report.capabilities;\n\t\t}\n\t\tif (filtro === 'inherited') {\n\t\t\treturn report.capabilities.filter((c) => c.grantedByType !== 'USER');\n\t\t}\n\t\treturn report.capabilities.filter((c) => c.situation === filtro);\n\t}, [report, filtro]);\n\n\tconst colunasExtras = slots?.additionalCapabilityColumns ?? [];\n\n\treturn (\n\t\t<Stack gap=\"lg\">\n\t\t\t<Section title=\"Consultar\" hint=\"por e-mail ou id do usuário\">\n\t\t\t\t{slots?.renderUserSearch ? (\n\t\t\t\t\tslots.renderUserSearch((identificador) => {\n\t\t\t\t\t\tsetBusca(identificador);\n\t\t\t\t\t\tvoid consultar(identificador);\n\t\t\t\t\t})\n\t\t\t\t) : (\n\t\t\t\t\t<Group gap=\"xs\" align=\"flex-end\">\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tstyle={{ flex: 1, minWidth: 240 }}\n\t\t\t\t\t\t\tlabel=\"Usuário\"\n\t\t\t\t\t\t\tplaceholder=\"pessoa@empresa.com.br\"\n\t\t\t\t\t\t\tvalue={busca}\n\t\t\t\t\t\t\tonChange={(event) => setBusca(event.currentTarget.value)}\n\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\tif (event.key === 'Enter') {\n\t\t\t\t\t\t\t\t\tvoid consultar(busca);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Button onClick={() => void consultar(busca)} loading={loading}>\n\t\t\t\t\t\t\tConsultar\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Group>\n\t\t\t\t)}\n\t\t\t</Section>\n\n\t\t\t{error ? (\n\t\t\t\t<Alert color=\"red\" title=\"Não foi possível ler o efetivo\">\n\t\t\t\t\t{error}\n\t\t\t\t</Alert>\n\t\t\t) : null}\n\n\t\t\t{loading && !report ? <Loader size=\"sm\" /> : null}\n\n\t\t\t{report ? (\n\t\t\t\t<>\n\t\t\t\t\t<Paper withBorder radius=\"md\" p=\"md\">\n\t\t\t\t\t\t<Stack gap=\"sm\">\n\t\t\t\t\t\t\t<Group gap={8} wrap=\"wrap\" align=\"center\">\n\t\t\t\t\t\t\t\t<Text fw={620}>{report.userLabel}</Text>\n\t\t\t\t\t\t\t\t{report.administrator ? <Badge color=\"red\">administrador</Badge> : null}\n\t\t\t\t\t\t\t\t{report.enabled ? null : <Badge color=\"red\">conta desativada</Badge>}\n\t\t\t\t\t\t\t\t{slots?.afterUserBadges?.(report)}\n\t\t\t\t\t\t\t</Group>\n\t\t\t\t\t\t\t<AttributeList attributes={atributos} />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</Paper>\n\n\t\t\t\t\t{report.administrator ? (\n\t\t\t\t\t\t<Alert color=\"orange\" title=\"Administrador passa direto\">\n\t\t\t\t\t\t\tO portão GRANT concede sem consultar o catálogo. A lista abaixo vir vazia não é falta de\n\t\t\t\t\t\t\tdado — é o atalho que a flag <code>isAdministrator</code> representa.\n\t\t\t\t\t\t</Alert>\n\t\t\t\t\t) : null}\n\n\t\t\t\t\t<SimpleGrid cols={{ base: 2, sm: 4 }} spacing=\"xs\">\n\t\t\t\t\t\t{(\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t['concedidas', report.granted, 'neutral'],\n\t\t\t\t\t\t\t\t['efetivas', report.effective, 'ok'],\n\t\t\t\t\t\t\t\t['inertes', report.inert, 'warning'],\n\t\t\t\t\t\t\t\t['negadas', report.denied, 'critical'],\n\t\t\t\t\t\t\t] as const\n\t\t\t\t\t\t).map(([rotulo, valor, severidade]) => (\n\t\t\t\t\t\t\t<Paper key={rotulo} withBorder radius=\"md\" p=\"sm\">\n\t\t\t\t\t\t\t\t<Stack gap={2}>\n\t\t\t\t\t\t\t\t\t<Text size=\"1.3rem\" fw={620} c={severityColor(severidade)}>\n\t\t\t\t\t\t\t\t\t\t{valor}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t<Text size=\"xs\" c=\"dimmed\">\n\t\t\t\t\t\t\t\t\t\t{rotulo}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t</Paper>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</SimpleGrid>\n\n\t\t\t\t\t{slots?.afterEffectiveTally?.(report)}\n\n\t\t\t\t\t<Section title=\"Capacidades\" hint={`${capacidades.length} de ${report.capabilities.length}`}>\n\t\t\t\t\t\t<Chip.Group multiple={false} value={filtro} onChange={(v) => setFiltro(v as Filtro)}>\n\t\t\t\t\t\t\t<Group gap={6}>\n\t\t\t\t\t\t\t\t{FILTROS.map((f) => (\n\t\t\t\t\t\t\t\t\t<Chip key={f.value} value={f.value} size=\"xs\" variant=\"outline\">\n\t\t\t\t\t\t\t\t\t\t{f.label}\n\t\t\t\t\t\t\t\t\t</Chip>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</Group>\n\t\t\t\t\t\t</Chip.Group>\n\n\t\t\t\t\t\t<Table.ScrollContainer minWidth={640}>\n\t\t\t\t\t\t\t<Table striped highlightOnHover withTableBorder>\n\t\t\t\t\t\t\t\t<Table.Thead>\n\t\t\t\t\t\t\t\t\t<Table.Tr>\n\t\t\t\t\t\t\t\t\t\t<Table.Th>Capacidade</Table.Th>\n\t\t\t\t\t\t\t\t\t\t<Table.Th>Origem</Table.Th>\n\t\t\t\t\t\t\t\t\t\t<Table.Th>Situação</Table.Th>\n\t\t\t\t\t\t\t\t\t\t{colunasExtras.map((coluna) => (\n\t\t\t\t\t\t\t\t\t\t\t<Table.Th key={coluna.header}>{coluna.header}</Table.Th>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</Table.Tr>\n\t\t\t\t\t\t\t\t</Table.Thead>\n\t\t\t\t\t\t\t\t<Table.Tbody>\n\t\t\t\t\t\t\t\t\t{capacidades.map((capacidade, indice) => (\n\t\t\t\t\t\t\t\t\t\t<Table.Tr key={`${capacidade.resource}:${capacidade.action}:${indice}`}>\n\t\t\t\t\t\t\t\t\t\t\t<Table.Td>\n\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"sm\" ff=\"monospace\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{capacidade.resource}:{capacidade.action}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</Table.Td>\n\t\t\t\t\t\t\t\t\t\t\t<Table.Td>\n\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text span c=\"dimmed\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ORIGEM[capacidade.grantedByType] ?? capacidade.grantedByType}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{capacidade.grantedByName}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</Table.Td>\n\t\t\t\t\t\t\t\t\t\t\t<Table.Td>\n\t\t\t\t\t\t\t\t\t\t\t\t<Badge color={SITUACAO[capacidade.situation].color} variant=\"light\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{SITUACAO[capacidade.situation].label}\n\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t</Table.Td>\n\t\t\t\t\t\t\t\t\t\t\t{colunasExtras.map((coluna) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<Table.Td key={coluna.header}>{coluna.render(capacidade, report)}</Table.Td>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</Table.Tr>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t{capacidades.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t<Table.Tr>\n\t\t\t\t\t\t\t\t\t\t\t<Table.Td colSpan={3 + colunasExtras.length}>\n\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNenhuma capacidade neste filtro.\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</Table.Td>\n\t\t\t\t\t\t\t\t\t\t</Table.Tr>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</Table.Tbody>\n\t\t\t\t\t\t\t</Table>\n\t\t\t\t\t\t</Table.ScrollContainer>\n\t\t\t\t\t</Section>\n\t\t\t\t</>\n\t\t\t) : null}\n\t\t</Stack>\n\t);\n};\n","/**\n * Simular — \"esta pessoa consegue fazer isto?\", e em qual portão parou quando não consegue.\n *\n * <p>O valor da tela não é o sim/não: é a <b>cadeia</b>. Saber que parou em LEVEL manda ajustar\n * nível; saber que parou em GRANT manda conceder. Sem isso, o operador tenta ao acaso.\n */\nimport React, { useCallback, useState } from 'react';\nimport { Alert, Badge, Button, Group, Loader, Paper, SimpleGrid, Stack, Text, TextInput } from '@mantine/core';\nimport { ARCHBASE_IOC_API_TYPE, processErrorMessage } from '@archbase/core';\nimport { useArchbaseRemoteServiceApi } from '@archbase/data';\nimport type {\n\tArchbaseAccessDecision,\n\tArchbaseAccessGate,\n\tArchbaseSecurityDiagnosticsService,\n} from '@archbase/security';\nimport { Section } from './DiagnosticPrimitives';\nimport type { ArchbaseSecurityDiagnosticsSlots } from './types';\n\nexport interface SimulationPanelProps {\n\tslots?: ArchbaseSecurityDiagnosticsSlots;\n\tonError?: (message: string) => void;\n}\n\n/**\n * Os cinco portões, com o papel de cada um.\n *\n * <p>O rótulo \"só nega\" não é enfeite: é a regra que organiza o modelo inteiro. Quatro portões\n * apenas recusam; um único concede. Quem entende isso para de procurar a concessão no lugar\n * errado.\n */\nconst PORTOES: Array<{ gate: ArchbaseAccessGate; titulo: string; papel: string; pergunta: string }> = [\n\t{ gate: 'IDENTITY', titulo: 'Identidade', papel: 'só nega', pergunta: 'O principal é resolvível e a conta está ativa?' },\n\t{ gate: 'SCOPE', titulo: 'Escopo', papel: 'só nega', pergunta: 'A concessão vale para o tenant, empresa e projeto pedidos?' },\n\t{ gate: 'RESTRICTION', titulo: 'Restrições', papel: 'só nega', pergunta: 'Perfil, papel e persona exigidos pela anotação.' },\n\t{ gate: 'LEVEL', titulo: 'Nível', papel: 'só nega', pergunta: 'O nível da pessoa alcança o piso da capacidade?' },\n\t{ gate: 'GRANT', titulo: 'Concessão', papel: 'concede', pergunta: 'Existe permissão, sem negação explícita?' },\n];\n\nexport const SimulationPanel = ({ slots, onError }: SimulationPanelProps) => {\n\tconst api = useArchbaseRemoteServiceApi<ArchbaseSecurityDiagnosticsService>(\n\t\tARCHBASE_IOC_API_TYPE.SecurityDiagnostics,\n\t);\n\tconst [usuario, setUsuario] = useState<string>('');\n\tconst [recurso, setRecurso] = useState<string>('');\n\tconst [acao, setAcao] = useState<string>('');\n\tconst [escopo, setEscopo] = useState<{ companyId?: string; projectId?: string }>({});\n\tconst [decision, setDecision] = useState<ArchbaseAccessDecision | undefined>(undefined);\n\tconst [loading, setLoading] = useState<boolean>(false);\n\tconst [error, setError] = useState<string | undefined>(undefined);\n\n\tconst simular = useCallback(async () => {\n\t\tif (!usuario.trim() || !recurso.trim() || !acao.trim()) {\n\t\t\treturn;\n\t\t}\n\t\tsetLoading(true);\n\t\tsetError(undefined);\n\t\ttry {\n\t\t\tconst alvo = usuario.trim();\n\t\t\tconst resultado = await api.simulate({\n\t\t\t\t...(alvo.includes('@') ? { email: alvo } : { userId: alvo }),\n\t\t\t\tresource: recurso.trim(),\n\t\t\t\taction: acao.trim(),\n\t\t\t\tcompanyId: escopo.companyId,\n\t\t\t\tprojectId: escopo.projectId,\n\t\t\t});\n\t\t\tsetDecision(resultado);\n\t\t} catch (erro) {\n\t\t\tconst mensagem = processErrorMessage(erro);\n\t\t\tsetError(mensagem);\n\t\t\tonError?.(mensagem);\n\t\t\tsetDecision(undefined);\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [api, usuario, recurso, acao, escopo, onError]);\n\n\t/** Um portão só é \"não avaliado\" quando a decisão parou antes dele. */\n\tconst situacaoDoPortao = (gate: ArchbaseAccessGate, d: ArchbaseAccessDecision) => {\n\t\tconst noResultado = d.chain?.find((o) => o.gate === gate);\n\t\tif (noResultado) {\n\t\t\treturn noResultado.passed ? 'passou' : 'negou';\n\t\t}\n\t\treturn 'nao-avaliado';\n\t};\n\n\treturn (\n\t\t<Stack gap=\"lg\">\n\t\t\t<Paper withBorder radius=\"md\" p=\"md\">\n\t\t\t\t<Stack gap=\"sm\">\n\t\t\t\t\t<SimpleGrid cols={{ base: 1, sm: 2, lg: 4 }} spacing=\"xs\">\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tlabel=\"Usuário\"\n\t\t\t\t\t\t\tplaceholder=\"e-mail ou id\"\n\t\t\t\t\t\t\tvalue={usuario}\n\t\t\t\t\t\t\tonChange={(e) => setUsuario(e.currentTarget.value)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tlabel=\"Recurso\"\n\t\t\t\t\t\t\tplaceholder=\"tms.ordemservico\"\n\t\t\t\t\t\t\tvalue={recurso}\n\t\t\t\t\t\t\tonChange={(e) => setRecurso(e.currentTarget.value)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tlabel=\"Ação\"\n\t\t\t\t\t\t\tplaceholder=\"aprovar_custo\"\n\t\t\t\t\t\t\tvalue={acao}\n\t\t\t\t\t\t\tonChange={(e) => setAcao(e.currentTarget.value)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tlabel=\"Empresa (opcional)\"\n\t\t\t\t\t\t\tplaceholder=\"companyId\"\n\t\t\t\t\t\t\tvalue={escopo.companyId ?? ''}\n\t\t\t\t\t\t\tonChange={(e) => setEscopo((s) => ({ ...s, companyId: e.currentTarget.value || undefined }))}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</SimpleGrid>\n\n\t\t\t\t\t{slots?.afterSimulationFields?.((novoEscopo) => setEscopo((s) => ({ ...s, ...novoEscopo })))}\n\n\t\t\t\t\t<Group gap=\"xs\" align=\"center\">\n\t\t\t\t\t\t<Button onClick={() => void simular()} loading={loading}>\n\t\t\t\t\t\t\tSimular\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Text size=\"xs\" c=\"dimmed\">\n\t\t\t\t\t\t\tSomente leitura — não altera permissão nenhuma.\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Group>\n\t\t\t\t</Stack>\n\t\t\t</Paper>\n\n\t\t\t{error ? (\n\t\t\t\t<Alert color=\"red\" title=\"Não foi possível simular\">\n\t\t\t\t\t{error}\n\t\t\t\t</Alert>\n\t\t\t) : null}\n\n\t\t\t{loading && !decision ? <Loader size=\"sm\" /> : null}\n\n\t\t\t{decision ? (\n\t\t\t\t<>\n\t\t\t\t\t<Section title=\"Cadeia de decisão\" hint=\"os quatro primeiros só negam; só o quinto concede\">\n\t\t\t\t\t\t<Paper withBorder radius=\"md\" p=\"md\">\n\t\t\t\t\t\t\t<Stack gap=\"sm\">\n\t\t\t\t\t\t\t\t{PORTOES.map((portao, indice) => {\n\t\t\t\t\t\t\t\t\tconst situacao = situacaoDoPortao(portao.gate, decision);\n\t\t\t\t\t\t\t\t\tconst detalhe = decision.chain?.find((o) => o.gate === portao.gate)?.detail;\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<Group key={portao.gate} align=\"flex-start\" wrap=\"nowrap\" gap=\"sm\">\n\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" ff=\"monospace\" c=\"dimmed\" w={16}>\n\t\t\t\t\t\t\t\t\t\t\t\t{indice + 1}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t<Stack gap={2} style={{ flex: 1, minWidth: 0 }}>\n\t\t\t\t\t\t\t\t\t\t\t\t<Group gap={8} align=\"baseline\" wrap=\"wrap\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfw={600}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tc={situacao === 'negou' ? 'red' : undefined}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\topacity={situacao === 'nao-avaliado' ? 0.5 : 1}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{portao.titulo}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" c=\"dimmed\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t· {portao.papel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t</Group>\n\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" c=\"dimmed\" opacity={situacao === 'nao-avaliado' ? 0.5 : 1}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{portao.pergunta}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t{detalhe ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" c=\"dimmed\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{detalhe}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"light\"\n\t\t\t\t\t\t\t\t\t\t\t\tcolor={situacao === 'negou' ? 'red' : situacao === 'passou' ? 'green' : 'gray'}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{situacao === 'nao-avaliado' ? 'não avaliado' : situacao}\n\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t</Group>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</Paper>\n\t\t\t\t\t</Section>\n\n\t\t\t\t\t<Alert color={decision.allowed ? 'green' : 'red'} title={decision.allowed ? 'Pode' : 'Não pode'}>\n\t\t\t\t\t\t<Stack gap={6}>\n\t\t\t\t\t\t\t<Text size=\"sm\">{decision.message}</Text>\n\t\t\t\t\t\t\t<Text size=\"xs\" ff=\"monospace\" c=\"dimmed\">\n\t\t\t\t\t\t\t\treasonCode: {decision.reasonCode}\n\t\t\t\t\t\t\t\t{decision.deniedAt ? ` · deniedAt: ${decision.deniedAt}` : ''}\n\t\t\t\t\t\t\t\t{decision.grantedByName ? ` · grantedBy: ${decision.grantedByName}` : ''}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</Alert>\n\n\t\t\t\t\t{slots?.afterDecision?.(decision)}\n\t\t\t\t</>\n\t\t\t) : null}\n\t\t</Stack>\n\t);\n};\n","/**\n * ArchbaseSecurityDiagnosticsView — o <b>leitor</b> da segurança.\n *\n * <p>Deliberadamente separada da {@link ArchbaseSecurityView}, que é o <b>editor</b>: aquela\n * tem uma aba por tabela e serve para mudar o estado; esta responde perguntas e não escreve\n * nada. Misturá-las produziria uma tela com dois motivos para mudar.\n *\n * <p>Extensão pelo objeto {@code slots} — ver {@link ArchbaseSecurityDiagnosticsSlots} para a\n * regra dos três verbos ({@code before}/{@code after}, {@code additional}, {@code render}).\n *\n * @status experimental\n */\nimport React, { useState } from 'react';\nimport { Paper, Tabs } from '@mantine/core';\nimport { IconChartBar, IconListSearch, IconShieldSearch } from '@tabler/icons-react';\nimport { OverviewPanel } from './OverviewPanel';\nimport { EffectiveAccessPanel } from './EffectiveAccessPanel';\nimport { SimulationPanel } from './SimulationPanel';\nimport type { ArchbaseSecurityDiagnosticsViewProps } from './types';\n\nconst TODAS: Array<'overview' | 'effective' | 'simulate'> = ['overview', 'effective', 'simulate'];\n\nexport function ArchbaseSecurityDiagnosticsView({\n\theight = '100%',\n\twidth = '100%',\n\tdefaultTab = 'overview',\n\ttabs = TODAS,\n\tslots,\n\tonError,\n}: ArchbaseSecurityDiagnosticsViewProps) {\n\tconst [abaAtiva, setAbaAtiva] = useState<string | null>(defaultTab);\n\n\tconst mostra = (aba: 'overview' | 'effective' | 'simulate') => tabs.includes(aba);\n\n\treturn (\n\t\t<Paper style={{ height, width }} p=\"md\" withBorder={false}>\n\t\t\t<Tabs value={abaAtiva} onChange={setAbaAtiva} variant=\"pills\" keepMounted={false}>\n\t\t\t\t<Tabs.List mb=\"md\">\n\t\t\t\t\t{mostra('overview') ? (\n\t\t\t\t\t\t<Tabs.Tab value=\"overview\" leftSection={<IconChartBar size=\"1rem\" />}>\n\t\t\t\t\t\t\tPanorama\n\t\t\t\t\t\t</Tabs.Tab>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{mostra('effective') ? (\n\t\t\t\t\t\t<Tabs.Tab value=\"effective\" leftSection={<IconListSearch size=\"1rem\" />}>\n\t\t\t\t\t\t\tEfetivo do usuário\n\t\t\t\t\t\t</Tabs.Tab>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{mostra('simulate') ? (\n\t\t\t\t\t\t<Tabs.Tab value=\"simulate\" leftSection={<IconShieldSearch size=\"1rem\" />}>\n\t\t\t\t\t\t\tSimular\n\t\t\t\t\t\t</Tabs.Tab>\n\t\t\t\t\t) : null}\n\t\t\t\t</Tabs.List>\n\n\t\t\t\t{mostra('overview') ? (\n\t\t\t\t\t<Tabs.Panel value=\"overview\">\n\t\t\t\t\t\t<OverviewPanel slots={slots} onError={onError} />\n\t\t\t\t\t</Tabs.Panel>\n\t\t\t\t) : null}\n\t\t\t\t{mostra('effective') ? (\n\t\t\t\t\t<Tabs.Panel value=\"effective\">\n\t\t\t\t\t\t<EffectiveAccessPanel slots={slots} onError={onError} />\n\t\t\t\t\t</Tabs.Panel>\n\t\t\t\t) : null}\n\t\t\t\t{mostra('simulate') ? (\n\t\t\t\t\t<Tabs.Panel value=\"simulate\">\n\t\t\t\t\t\t<SimulationPanel slots={slots} onError={onError} />\n\t\t\t\t\t</Tabs.Panel>\n\t\t\t\t) : null}\n\t\t\t</Tabs>\n\t\t</Paper>\n\t);\n}\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","jsxRuntimeModule","require$$0","ProfileModal","props","options","handleSave","success","handleCancel","jsx","Modal","getI18nextInstance","ScrollArea","jsxs","Stack","Grid","ArchbaseEdit","Group","Button","ArchbaseDualListSelector","availableItemsDS","assignedItemsDS","idFieldAvailable","labelFieldAvailable","idFieldAssigned","labelFieldAssigned","handleCreateAssociationObject","width","height","titleAvailable","titleAssigned","useArchbaseV1V2Compatibility","assignedV1V2","availableItems","setAvailableItems","useState","assignedItems","setAssignedItems","selectedAvailable","setSelectedAvailable","selectedAssigned","setSelectedAssigned","loadItemsData","useCallback","useArchbaseDataSourceListener","useEffect","getItemId","item","field","getItemLabel","handleSelect","setId","id","prev","handleAdd","originalItem","newItem","handleRemove","record","criteria","Paper","Box","Text","List","Checkbox","g","Tooltip","ActionIcon","IconArrowRight","IconArrowLeft","RenderProfileUserItem","forwardRef","image","label","description","origin","others","ref","Flex","Space","defaultUserModalOptions","UserModal","passwordError","setPasswordError","rawPasswordChangedAt","parsedPasswordChangedAt","passwordChangedAt","basePasswordPolicy","resolveArchbasePasswordPolicy","personalTerms","term","passwordPolicy","groupApi","useArchbaseRemoteServiceApi","ARCHBASE_IOC_API_TYPE","dsGroups","useArchbaseRemoteDataSource","error","ArchbaseNotifications","profileApi","dsProfiles","setDefaultValues","filter","emit","builder","result","group","UserGroupDto","currentRecord","validateArchbasePassword","value","ArchbasePasswordEdit","ArchbaseSelect","option","Input","ArchbaseCheckbox","ArchbaseAvatarEdit","ArchbaseDataSource","Fragment","GroupModal","UserSelectItem","ApiTokenModal","useFocusTrap","setValue","userApi","v1v2Compatibility","handleChange","dateValue","isoString","convertDateToISOString","loadRemoteUsers","page","resolve","reject","processErrorMessage","DateTimePicker","ArchbaseAsyncSelect","translateDelimitedString","inputString","delimiter","part","PermissionsSelectorModal","dataSource","opened","close","name","useMemo","securityId","availablePermissionsTree","useTree","grantedPermissionsTree","availablePermissions","setAvailablePermissions","grantedPermissions","setGrantedPermissions","selectedAvailablePermission","setSelectedAvailablePermission","selectedGrantedPermission","setSelectedGrantedPermission","availablePermissionsFilter","setAvailablePermissionsFilter","debouncedAvailablePermissionsFilter","useDebouncedValue","grantedPermissionsFilter","setGrantedPermissionsFilter","debouncedGrantedPermissionsFilter","resourceApi","colorScheme","useMantineColorScheme","selectedColor","permissionsGrantedData","a","b","resourcePermissions","permission","grantedPermissionsActionIds","allPermissionsData","permissionGranted","resourcePermissionsGranted","getKeyByEnumValue","SecurityType","loadPermissions","permissionsGranted","allPermissions","resouceActionPermissionDto","updatedPermissionsGranted","resourceAvailablePermissions","resourcePermissionsNode","previousSelectedPermissionIndex","nextSelectedAvailablePermission","permissionNode","index","hasOnePermissionOnResource","resource","currentType","resourceGrantedPermissions","nextSelectedGrantedPermission","ArchbaseSpaceFixed","ArchbaseSpaceFill","TextInput","event","Tree","level","node","expanded","hasChildren","selected","elementProps","isGranted","textColor","textDecoration","handleClick","IconChevronDown","IconBorderCornerSquare","Badge","ArchbaseSpaceBottom","NO_USER","renderGroups","user","renderProfile","buildAccessTokenColumns","Columns","ArchbaseDataGridColumn","data","buildUserColumns","row","buildGroupColumns","buildProfileColumns","buildResourceColumns","SecurityGridPanel","active","printTitle","gridRef","isLoading","getRowId","striped","enableRowActions","toolbarLeftContent","renderRowActions","actionsColumnWidth","children","ArchbaseDataGrid","useSecurityEntityActions","securityType","newInstance","createEntitiesWithId","removeMessageKey","setOpenedModal","setOpenedPermissionsModal","validationContext","t","ds","posicionarEm","registro","ArchbaseDialog","SecurityRowActions","onView","onEdit","onRemove","onEditPermissions","before","after","theme","useArchbaseTheme","escuro","cor","nome","IconEye","IconEdit","IconTrashX","IconShieldCheckered","SecurityToolbarActions","onAdd","IconPlus","ArchbaseSecurityView","userModalOptions","profileModalOptions","groupModalOptions","useArchbaseStore","validator","useArchbaseValidator","setError","activeTab","setActiveTab","openedModal","openedPermissionsModal","accessTokenApi","useArchbaseTranslation","usersGridRef","useRef","groupsGridRef","profilesGridRef","resourcesGridRef","accessTokensGridRef","getUserRowId","getGroupRowId","getProfileRowId","getResourceRowId","getAccessTokenRowId","dsAccessTokens","isLoadingAccessTokens","refreshAccessTokens","useArchbaseRemoteDataSourceV2","dsUsers","isLoadingUsers","refreshUsers","isLoadingGroups","refreshGroups","isLoadingProfiles","refreshProfiles","dsResources","isLoadingResources","refreshResources","accessTokenColumns","userColumns","groupColumns","profileColumns","resourceColumns","useValidationErrors","userActions","UserDto","groupActions","GroupDto","profileActions","ProfileDto","buildUserRowActions","buildGroupRowActions","buildProfileRowActions","handleAccessTokenRevokeRow","currentAccessToken","processDetailErrorMessage","handleClosePermissionsModal","renderAccessTokensToolbarActions","Tabs","ArchbaseApiTokenView","templateStore","apiTokenApi","useArchbaseDataSource","localDataSourceV1V2","dsApiTokens","remoteDataSourceV1V2","heightTab","columns","today","expDate","diffTime","diffDays","percentage","color","tooltipText","RingProgress","handleCreateApiTokenExecute","ApiTokenDto","handleApiTokenRevokeRow","handleCloseApiTokenModal","handleSaveApiToken","callback","apiToken","response","ex","renderToolbarActions","severityColor","severity","MetricCard","card","MetricCards","cards","SimpleGrid","FlagStrip","flags","flag","AttributeList","attributes","attribute","Section","title","hint","percent","whole","buildFlags","overview","buildCards","OverviewPanel","slots","onError","api","setOverview","loading","setLoading","vivo","resultado","erro","mensagem","Loader","Alert","SITUACAO","ORIGEM","FILTROS","EffectiveAccessPanel","busca","setBusca","report","setReport","filtro","setFiltro","consultar","identificador","alvo","atributos","capacidades","c","colunasExtras","rotulo","valor","severidade","Chip","v","f","Table","coluna","capacidade","indice","PORTOES","SimulationPanel","usuario","setUsuario","recurso","setRecurso","acao","setAcao","escopo","setEscopo","decision","setDecision","simular","situacaoDoPortao","gate","d","noResultado","o","e","s","novoEscopo","portao","situacao","detalhe","TODAS","ArchbaseSecurityDiagnosticsView","defaultTab","tabs","abaAtiva","setAbaAtiva","mostra","aba","IconChartBar","IconListSearch","IconShieldSearch"],"mappings":"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","x_google_ignoreList":[0,1]}
|