@archbase/security-ui 3.0.0 → 3.0.3

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.
@@ -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 { useFocusTrap } from '@mantine/hooks'\nimport { ArchbaseDataSource } from '@archbase/data'\nimport { getI18nextInstance } from '@archbase/core';\nimport { ProfileDto } from '@archbase/security'\nimport { ArchbaseEdit } from '@archbase/components'\n\nexport interface ProfileModalOptions {\n customContentBefore?: React.ReactNode;\n\n customContentAfter?: React.ReactNode;\n}\n\nexport interface ProfileModalProps {\n dataSource: ArchbaseDataSource<ProfileDto, string>\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 customContentBefore?: React.ReactNode\n customContentAfter?: React.ReactNode\n options?: ProfileModalOptions\n}\n\nexport const ProfileModal = (props: ProfileModalProps) => {\n const focusTrapRef = useFocusTrap()\n const options = {...(props.options ?? {}) }\n \n const handleSave = () => {\n if (props.onCustomSave) {\n props.onCustomSave(props.dataSource.current, (success: boolean) => {\n if (success && props.onAfterSave) {\n props.onAfterSave(props.dataSource.current);\n }\n props.onClickOk(props.dataSource.current, success);\n });\n } else {\n props.onClickOk(props.dataSource.current, true);\n }\n };\n\n const handleCancel = () => {\n props.onClickCancel(props.dataSource.current);\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 && (\n <>\n {options.customContentBefore}\n </>\n )}\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 && (\n <>\n {options.customContentAfter}\n </>\n )}\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 } from '@archbase/core'\nimport { 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 { useFocusTrap } from '@mantine/hooks'\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\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\n /** Configuração de permissão de edição de campos */\n allowEditEmail?: boolean;\n\n customContentBefore?: React.ReactNode;\n\n customContentAfter?: React.ReactNode;\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\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\n allowEditEmail: true,\n}\n\nexport interface UserModalProps {\n dataSource: ArchbaseDataSource<UserDto, string>\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 focusTrapRef = useFocusTrap()\n const [passwordError, setPasswordError] = useState(\"\")\n const options = { ...defaultUserModalOptions, ...(props.options ?? {}) }\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\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 handleSave = () => {\n const currentRecord = props.dataSource.current;\n if (!currentRecord.password && props.dataSource.isInserting()) {\n setPasswordError(getI18nextInstance().t('archbase:Informe a senha'))\n return;\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.current);\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 ref={focusTrapRef} style={{ height: '500px' }}>\n <Stack w={\"98%\"}>\n {options?.customContentBefore && (\n <>\n {options.customContentBefore}\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 />\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 </Input.Wrapper>\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 />\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}\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 { useFocusTrap } from '@mantine/hooks'\nimport { getI18nextInstance } from '@archbase/core';\nimport { GroupDto } from '@archbase/security'\nimport { ArchbaseDataSource } from '@archbase/data'\nimport { ArchbaseEdit } from '@archbase/components'\n\nexport interface GroupModalOptions {\n customContentBefore?: React.ReactNode;\n\n customContentAfter?: React.ReactNode;\n}\n\nexport interface GroupModalProps {\n dataSource: ArchbaseDataSource<GroupDto, string>\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 customContentBefore?: React.ReactNode\n customContentAfter?: React.ReactNode\n options?: GroupModalOptions\n}\n\nexport const GroupModal = (props: GroupModalProps) => {\n const focusTrapRef = useFocusTrap()\n const options = {...(props.options ?? {}) }\n \n const handleSave = () => {\n if (props.onCustomSave) {\n props.onCustomSave(props.dataSource.current, (success: boolean) => {\n if (success && props.onAfterSave) {\n props.onAfterSave(props.dataSource.current);\n }\n props.onClickOk(props.dataSource.current, success);\n });\n } else {\n props.onClickOk(props.dataSource.current, true);\n }\n };\n\n const handleCancel = () => {\n props.onClickCancel(props.dataSource.current);\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 && (\n <>\n {props.options.customContentBefore}\n </>\n )}\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 && (\n <>\n {props.options.customContentAfter}\n </>\n )}\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 { ArchbaseSelect, ArchbaseEdit } 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, OptionsResult, 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, value): 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\tdata: result.content,\n\t\t\t\t\tpage: result.pageable!.pageNumber,\n\t\t\t\t\ttotal: result.totalElements,\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<ArchbaseSelect<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!}\n\t\t\t\t\tgetOptionValue={(option: UserDto) => option.id?.toString() || ''}\n\t\t\t\t\tdebounceTime={500}\n\t\t\t\t\titemComponent={UserSelectItem}\n\t\t\t\t\toptions={[]}\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, Grid, 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, ArchbaseRemoteDataSource } 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: ArchbaseRemoteDataSource<any, 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 <ScrollArea h={\"500px\"}>\n <Paper withBorder my={20} p={20}>\n <Grid columns={20}>\n <Grid.Col span={9}>\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 <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 </Grid.Col>\n <Grid.Col span={2}>\n <Stack gap={5} style={{ minWidth: '10%' }} justify=\"center\" align=\"center\" h={\"100%\"}>\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 </Grid.Col>\n <Grid.Col span={9}>\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 <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 </Grid.Col>\n </Grid>\n </Paper>\n </ScrollArea>\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 } from '@archbase/core';\nimport { ArchbaseDataSource } from '@archbase/data';\n// import { ArchbaseCountdownProgress } from '@archbase/components'; // Temporarily disabled\nimport { useArchbaseV1V2Compatibility } from '@archbase/data';\nimport {\n\tuseArchbaseRemoteDataSource,\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\tBox,\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, 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\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}\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? user.groups.map((item, index) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div key={index} style={{ paddingRight: '2px' }}>\n\t\t\t\t\t\t\t\t<Badge color=\"blue\">{item.group?.name}</Badge>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t })\n\t\t\t\t: null}\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}: 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\t// 🔄 MIGRAÇÃO V1/V2: Compatibilidade para DataSources principais\n\tconst usersV1V2 = useArchbaseV1V2Compatibility<UserDto>(\n\t\t'ArchbaseSecurityView-Users',\n\t\tundefined, // Will be set when dsUsers is available\n\t\tundefined,\n\t\tundefined\n\t);\n\n\tconst groupsV1V2 = useArchbaseV1V2Compatibility<GroupDto>(\n\t\t'ArchbaseSecurityView-Groups',\n\t\tundefined, // Will be set when dsGroups is available\n\t\tundefined,\n\t\tundefined\n\t);\n\n\tconst profilesV1V2 = useArchbaseV1V2Compatibility<ProfileDto>(\n\t\t'ArchbaseSecurityView-Profiles',\n\t\tundefined, // Will be set when dsProfiles is available\n\t\tundefined,\n\t\tundefined\n\t);\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 { dataSource: dsAccessTokens, isLoading: isLoadingAccessTokens } = useArchbaseRemoteDataSource<\n\t\tAccessTokenDto,\n\t\tstring\n\t>({\n\t\tname: 'accessTokenApi',\n\t\tservice: accessTokenApi,\n\t\tstore: templateStore,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tloadOnStart: true,\n\t\tfilter: emit(builder.or(builder.eq('revoked', `false`))),\n\t\tsort: ['user.email', 'expirationTime:desc'],\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(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst { dataSource: dsUsers, isLoading: isLoadingUsers } = useArchbaseRemoteDataSource<UserDto, string>({\n\t\tname: 'dsUsers',\n\t\tservice: userApi,\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(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst { dataSource: dsGroups, isLoading: isLoadingGroups } = useArchbaseRemoteDataSource<GroupDto, string>({\n\t\tname: 'dsGroups',\n\t\tservice: groupApi,\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(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst { dataSource: dsProfiles, isLoading: isLoadingProfiles } = useArchbaseRemoteDataSource<ProfileDto, string>({\n\t\tname: 'dsProfile',\n\t\tservice: profileApi,\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(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst { dataSource: dsResources, isLoading: isLoadingResources } = useArchbaseRemoteDataSource<ResourceDto, string>({\n\t\tname: 'dsResources',\n\t\tservice: resourceApi,\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(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst heightTab = `calc(${height} - 40px)`;\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/>\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/>\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/>\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/>\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/>\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\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=\"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=\"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\tuser.id = undefined;\n\t\t}\n\t\t\n\t\t// 🔄 MIGRAÇÃO V1/V2: Inserção com compatibilidade\n\t\tdsUsers.insert(user);\n\t\t\n\t\t// Se for V1, forçar atualização\n\t\tif (dsUsers && !usersV1V2.isDataSourceV2) {\n\t\t\tusersV1V2.v1State.forceUpdate();\n\t\t}\n\t\t\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\t\n\t\t\t\t// 🔄 MIGRAÇÃO V1/V2: Edição com compatibilidade V1\n\t\t\t\tif (!usersV1V2.isDataSourceV2) {\n\t\t\t\t\tusersV1V2.v1State.forceUpdate();\n\t\t\t\t}\n\t\t\t\t\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\t\n\t\t\t\t\t\t// 🔄 MIGRAÇÃO V1/V2: Remoção com compatibilidade V1\n\t\t\t\t\t\tif (!usersV1V2.isDataSourceV2) {\n\t\t\t\t\t\t\tusersV1V2.v1State.forceUpdate();\n\t\t\t\t\t\t}\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<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</Group>\n\t\t);\n\t};\n\n\tconst handleAddGroupExecute = () => {\n\t\tconst group = GroupDto.newInstance();\n\t\tif (!createEntitiesWithId) {\n\t\t\tgroup.id = undefined;\n\t\t}\n\t\t\n\t\t// 🔄 MIGRAÇÃO V1/V2: Inserção com compatibilidade\n\t\tdsGroups.insert(group);\n\t\t\n\t\t// Se for V1, forçar atualização\n\t\tif (dsGroups && !groupsV1V2.isDataSourceV2) {\n\t\t\tgroupsV1V2.v1State.forceUpdate();\n\t\t}\n\t\t\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\tdsGroups.edit();\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<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</Group>\n\t\t);\n\t};\n\n\tconst handleCloseUserModal = () => {\n\t\tsetOpenedModal('');\n\t};\n\n\tconst handleCloseGroupModal = () => {\n\t\tsetOpenedModal('');\n\t};\n\n\tconst handleCloseProfileModal = () => {\n\t\tsetOpenedModal('');\n\t};\n\n\tconst handleAddProfileExecute = () => {\n\t\tconst profile = ProfileDto.newInstance();\n\t\tif (!createEntitiesWithId) {\n\t\t\tprofile.id = undefined;\n\t\t}\n\t\t\n\t\t// 🔄 MIGRAÇÃO V1/V2: Inserção com compatibilidade\n\t\tdsProfiles.insert(profile);\n\t\t\n\t\t// Se for V1, forçar atualização\n\t\tif (dsProfiles && !profilesV1V2.isDataSourceV2) {\n\t\t\tprofilesV1V2.v1State.forceUpdate();\n\t\t}\n\t\t\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\tdsProfiles.edit();\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<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</Group>\n\t\t);\n\t};\n\n\tconst handleAccessTokenRevokeRow = () => {\n\t\tif (dsAccessTokens.getCurrentRecord()) {\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 ')}${dsAccessTokens.getCurrentRecord().user.name} ?`,\n\t\t\t\tasync () => {\n\t\t\t\t\tawait accessTokenApi\n\t\t\t\t\t\t.revoke(dsAccessTokens.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`${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 style={{ height: height }}>\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<Box\n\t\t\t\tstyle={{\n\t\t\t\t\theight: heightTab,\n\t\t\t\t\tdisplay: activeTab === 'users' ? 'flex' : 'none',\n\t\t\t\t\twidth: '100%',\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\tchildren={userColumns}\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t\t<Box\n\t\t\t\tstyle={{\n\t\t\t\t\theight: heightTab,\n\t\t\t\t\tdisplay: activeTab === 'groups' ? 'flex' : 'none',\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\tchildren={groupColumns}\n\t\t\t\t\ttoolbarLeftContent={renderGroupsToolbarActions()}\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t\t<Box\n\t\t\t\tstyle={{\n\t\t\t\t\theight: heightTab,\n\t\t\t\t\tdisplay: activeTab === 'profiles' ? 'flex' : 'none',\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\tchildren={profileColumns}\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t\t<Box\n\t\t\t\tstyle={{\n\t\t\t\t\theight: heightTab,\n\t\t\t\t\tdisplay: activeTab === 'resources' ? 'flex' : 'none',\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</Box>\n\t\t\t<Box\n\t\t\t\tstyle={{\n\t\t\t\t\theight: heightTab,\n\t\t\t\t\tdisplay: activeTab === 'accessTokens' ? 'flex' : 'none',\n\t\t\t\t\twidth: '100%',\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</Box>\n\t\t\t{openedModal === SecurityType.USER ? (\n\t\t\t\t<UserModal\n\t\t\t\t\tonClickOk={handleCloseUserModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dsUsers}\n\t\t\t\t\tonClickCancel={handleCloseUserModal}\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={handleCloseGroupModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dsGroups}\n\t\t\t\t\tonClickCancel={handleCloseGroupModal}\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={handleCloseProfileModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dsProfiles}\n\t\t\t\t\tonClickCancel={handleCloseProfileModal}\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\tBox,\n\tButton,\n\tText,\n\tFlex,\n\tGroup,\n\tPaper,\n\tuseMantineColorScheme,\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=\"token\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Token API\"\n\t\t\t\tsize={260}\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={260}\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={300}\n\t\t\t\theader=\"Expira em\"\n\t\t\t\trender={(data) => <Text>{data.row.expirationDate ? new Date(data.row.expirationDate).toLocaleDateString() : '-'}</Text>}\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\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();\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 style={{ height: height }}>\n\t\t\t<Box\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}}\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</Box>\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","useFocusTrap","options","handleSave","success","handleCancel","jsx","Modal","getI18nextInstance","ScrollArea","jsxs","Stack","Fragment","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","focusTrapRef","passwordError","setPasswordError","groupApi","useArchbaseRemoteServiceApi","ARCHBASE_IOC_API_TYPE","dsGroups","useArchbaseRemoteDataSource","error","ArchbaseNotifications","profileApi","dsProfiles","currentRecord","value","ArchbasePasswordEdit","ArchbaseSelect","option","Input","ArchbaseCheckbox","ArchbaseAvatarEdit","ArchbaseDataSource","group","UserGroupDto","GroupModal","UserSelectItem","ApiTokenModal","setValue","v1v2Compatibility","handleChange","dateValue","isoString","convertDateToISOString","DateTimePicker","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","templateStore","useArchbaseStore","validator","useArchbaseValidator","setError","activeTab","setActiveTab","userApi","openedModal","setOpenedModal","openedPermissionsModal","setOpenedPermissionsModal","accessTokenApi","t","useArchbaseTranslation","usersV1V2","groupsV1V2","profilesV1V2","usersGridRef","useRef","groupsGridRef","profilesGridRef","resourcesGridRef","accessTokensGridRef","getUserRowId","row","getGroupRowId","getProfileRowId","getResourceRowId","getAccessTokenRowId","dsAccessTokens","isLoadingAccessTokens","emit","builder","dsUsers","isLoadingUsers","isLoadingGroups","isLoadingProfiles","dsResources","isLoadingResources","heightTab","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","handleCloseUserModal","handleCloseGroupModal","handleCloseProfileModal","handleAddProfileExecute","profile","ProfileDto","handleProfileEditRow","handleProfileRemoveRow","handleProfileViewRow","buildProfileRowActions","handleOpenProfilePermissionsModal","handleAccessTokenRevokeRow","processErrorMessage","processDetailErrorMessage","handleClosePermissionsModal","renderUsersToolbarActions","IconPlus","renderGroupsToolbarActions","renderProfilesToolbarActions","renderAccessTokensToolbarActions","Tabs","ArchbaseDataGrid","ArchbaseApiTokenView","apiTokenApi","gridRef","getRowId","useArchbaseDataSource","localDataSourceV1V2","dsApiTokens","isLoading","remoteDataSourceV1V2","columns","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/react/cjs/react-jsx-runtime.production.js","../../../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 { useFocusTrap } from '@mantine/hooks'\nimport { ArchbaseDataSource } from '@archbase/data'\nimport { getI18nextInstance } from '@archbase/core';\nimport { ProfileDto } from '@archbase/security'\nimport { ArchbaseEdit } from '@archbase/components'\n\nexport interface ProfileModalOptions {\n customContentBefore?: React.ReactNode;\n\n customContentAfter?: React.ReactNode;\n}\n\nexport interface ProfileModalProps {\n dataSource: ArchbaseDataSource<ProfileDto, string>\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 customContentBefore?: React.ReactNode\n customContentAfter?: React.ReactNode\n options?: ProfileModalOptions\n}\n\nexport const ProfileModal = (props: ProfileModalProps) => {\n const focusTrapRef = useFocusTrap()\n const options = {...(props.options ?? {}) }\n \n const handleSave = () => {\n if (props.onCustomSave) {\n props.onCustomSave(props.dataSource.current, (success: boolean) => {\n if (success && props.onAfterSave) {\n props.onAfterSave(props.dataSource.current);\n }\n props.onClickOk(props.dataSource.current, success);\n });\n } else {\n props.onClickOk(props.dataSource.current, true);\n }\n };\n\n const handleCancel = () => {\n props.onClickCancel(props.dataSource.current);\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 && (\n <>\n {options.customContentBefore}\n </>\n )}\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 && (\n <>\n {options.customContentAfter}\n </>\n )}\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 } from '@archbase/core'\nimport { 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 { useFocusTrap } from '@mantine/hooks'\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\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\n /** Configuração de permissão de edição de campos */\n allowEditEmail?: boolean;\n\n customContentBefore?: React.ReactNode;\n\n customContentAfter?: React.ReactNode;\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\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\n allowEditEmail: true,\n}\n\nexport interface UserModalProps {\n dataSource: ArchbaseDataSource<UserDto, string>\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 focusTrapRef = useFocusTrap()\n const [passwordError, setPasswordError] = useState(\"\")\n const options = { ...defaultUserModalOptions, ...(props.options ?? {}) }\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\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 handleSave = () => {\n const currentRecord = props.dataSource.current;\n if (!currentRecord.password && props.dataSource.isInserting()) {\n setPasswordError(getI18nextInstance().t('archbase:Informe a senha'))\n return;\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.current);\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 ref={focusTrapRef} style={{ height: '500px' }}>\n <Stack w={\"98%\"}>\n {options?.customContentBefore && (\n <>\n {options.customContentBefore}\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 />\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 </Input.Wrapper>\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 />\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}\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 { useFocusTrap } from '@mantine/hooks'\nimport { getI18nextInstance } from '@archbase/core';\nimport { GroupDto } from '@archbase/security'\nimport { ArchbaseDataSource } from '@archbase/data'\nimport { ArchbaseEdit } from '@archbase/components'\n\nexport interface GroupModalOptions {\n customContentBefore?: React.ReactNode;\n\n customContentAfter?: React.ReactNode;\n}\n\nexport interface GroupModalProps {\n dataSource: ArchbaseDataSource<GroupDto, string>\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 customContentBefore?: React.ReactNode\n customContentAfter?: React.ReactNode\n options?: GroupModalOptions\n}\n\nexport const GroupModal = (props: GroupModalProps) => {\n const focusTrapRef = useFocusTrap()\n const options = {...(props.options ?? {}) }\n \n const handleSave = () => {\n if (props.onCustomSave) {\n props.onCustomSave(props.dataSource.current, (success: boolean) => {\n if (success && props.onAfterSave) {\n props.onAfterSave(props.dataSource.current);\n }\n props.onClickOk(props.dataSource.current, success);\n });\n } else {\n props.onClickOk(props.dataSource.current, true);\n }\n };\n\n const handleCancel = () => {\n props.onClickCancel(props.dataSource.current);\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 && (\n <>\n {props.options.customContentBefore}\n </>\n )}\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 && (\n <>\n {props.options.customContentAfter}\n </>\n )}\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 { ArchbaseSelect, ArchbaseEdit } 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, OptionsResult, 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, value): 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\tdata: result.content,\n\t\t\t\t\tpage: result.pageable!.pageNumber,\n\t\t\t\t\ttotal: result.totalElements,\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<ArchbaseSelect<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!}\n\t\t\t\t\tgetOptionValue={(option: UserDto) => option.id?.toString() || ''}\n\t\t\t\t\tdebounceTime={500}\n\t\t\t\t\titemComponent={UserSelectItem}\n\t\t\t\t\toptions={[]}\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, Grid, 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, ArchbaseRemoteDataSource } 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: ArchbaseRemoteDataSource<any, 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 <ScrollArea h={\"500px\"}>\n <Paper withBorder my={20} p={20}>\n <Grid columns={20}>\n <Grid.Col span={9}>\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 <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 </Grid.Col>\n <Grid.Col span={2}>\n <Stack gap={5} style={{ minWidth: '10%' }} justify=\"center\" align=\"center\" h={\"100%\"}>\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 </Grid.Col>\n <Grid.Col span={9}>\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 <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 </Grid.Col>\n </Grid>\n </Paper>\n </ScrollArea>\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 } from '@archbase/core';\nimport { ArchbaseDataSource } from '@archbase/data';\n// import { ArchbaseCountdownProgress } from '@archbase/components'; // Temporarily disabled\nimport { useArchbaseV1V2Compatibility } from '@archbase/data';\nimport {\n\tuseArchbaseRemoteDataSource,\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\tBox,\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, 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\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}\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? user.groups.map((item, index) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div key={index} style={{ paddingRight: '2px' }}>\n\t\t\t\t\t\t\t\t<Badge color=\"blue\">{item.group?.name}</Badge>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t })\n\t\t\t\t: null}\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}: 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\t// 🔄 MIGRAÇÃO V1/V2: Compatibilidade para DataSources principais\n\tconst usersV1V2 = useArchbaseV1V2Compatibility<UserDto>(\n\t\t'ArchbaseSecurityView-Users',\n\t\tundefined, // Will be set when dsUsers is available\n\t\tundefined,\n\t\tundefined\n\t);\n\n\tconst groupsV1V2 = useArchbaseV1V2Compatibility<GroupDto>(\n\t\t'ArchbaseSecurityView-Groups',\n\t\tundefined, // Will be set when dsGroups is available\n\t\tundefined,\n\t\tundefined\n\t);\n\n\tconst profilesV1V2 = useArchbaseV1V2Compatibility<ProfileDto>(\n\t\t'ArchbaseSecurityView-Profiles',\n\t\tundefined, // Will be set when dsProfiles is available\n\t\tundefined,\n\t\tundefined\n\t);\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 { dataSource: dsAccessTokens, isLoading: isLoadingAccessTokens } = useArchbaseRemoteDataSource<\n\t\tAccessTokenDto,\n\t\tstring\n\t>({\n\t\tname: 'accessTokenApi',\n\t\tservice: accessTokenApi,\n\t\tstore: templateStore,\n\t\tvalidator,\n\t\tpageSize: 25,\n\t\tloadOnStart: true,\n\t\tfilter: emit(builder.or(builder.eq('revoked', `false`))),\n\t\tsort: ['user.email', 'expirationTime:desc'],\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(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst { dataSource: dsUsers, isLoading: isLoadingUsers } = useArchbaseRemoteDataSource<UserDto, string>({\n\t\tname: 'dsUsers',\n\t\tservice: userApi,\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(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst { dataSource: dsGroups, isLoading: isLoadingGroups } = useArchbaseRemoteDataSource<GroupDto, string>({\n\t\tname: 'dsGroups',\n\t\tservice: groupApi,\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(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst { dataSource: dsProfiles, isLoading: isLoadingProfiles } = useArchbaseRemoteDataSource<ProfileDto, string>({\n\t\tname: 'dsProfile',\n\t\tservice: profileApi,\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(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst { dataSource: dsResources, isLoading: isLoadingResources } = useArchbaseRemoteDataSource<ResourceDto, string>({\n\t\tname: 'dsResources',\n\t\tservice: resourceApi,\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(`${t('archbase:WARNING')}`, error, origin);\n\t\t},\n\t});\n\n\tconst heightTab = `calc(${height} - 40px)`;\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/>\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/>\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/>\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/>\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/>\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\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=\"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=\"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\tuser.id = undefined;\n\t\t}\n\t\t\n\t\t// 🔄 MIGRAÇÃO V1/V2: Inserção com compatibilidade\n\t\tdsUsers.insert(user);\n\t\t\n\t\t// Se for V1, forçar atualização\n\t\tif (dsUsers && !usersV1V2.isDataSourceV2) {\n\t\t\tusersV1V2.v1State.forceUpdate();\n\t\t}\n\t\t\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\t\n\t\t\t\t// 🔄 MIGRAÇÃO V1/V2: Edição com compatibilidade V1\n\t\t\t\tif (!usersV1V2.isDataSourceV2) {\n\t\t\t\t\tusersV1V2.v1State.forceUpdate();\n\t\t\t\t}\n\t\t\t\t\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\t\n\t\t\t\t\t\t// 🔄 MIGRAÇÃO V1/V2: Remoção com compatibilidade V1\n\t\t\t\t\t\tif (!usersV1V2.isDataSourceV2) {\n\t\t\t\t\t\t\tusersV1V2.v1State.forceUpdate();\n\t\t\t\t\t\t}\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<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</Group>\n\t\t);\n\t};\n\n\tconst handleAddGroupExecute = () => {\n\t\tconst group = GroupDto.newInstance();\n\t\tif (!createEntitiesWithId) {\n\t\t\tgroup.id = undefined;\n\t\t}\n\t\t\n\t\t// 🔄 MIGRAÇÃO V1/V2: Inserção com compatibilidade\n\t\tdsGroups.insert(group);\n\t\t\n\t\t// Se for V1, forçar atualização\n\t\tif (dsGroups && !groupsV1V2.isDataSourceV2) {\n\t\t\tgroupsV1V2.v1State.forceUpdate();\n\t\t}\n\t\t\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\tdsGroups.edit();\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<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</Group>\n\t\t);\n\t};\n\n\tconst handleCloseUserModal = () => {\n\t\tsetOpenedModal('');\n\t};\n\n\tconst handleCloseGroupModal = () => {\n\t\tsetOpenedModal('');\n\t};\n\n\tconst handleCloseProfileModal = () => {\n\t\tsetOpenedModal('');\n\t};\n\n\tconst handleAddProfileExecute = () => {\n\t\tconst profile = ProfileDto.newInstance();\n\t\tif (!createEntitiesWithId) {\n\t\t\tprofile.id = undefined;\n\t\t}\n\t\t\n\t\t// 🔄 MIGRAÇÃO V1/V2: Inserção com compatibilidade\n\t\tdsProfiles.insert(profile);\n\t\t\n\t\t// Se for V1, forçar atualização\n\t\tif (dsProfiles && !profilesV1V2.isDataSourceV2) {\n\t\t\tprofilesV1V2.v1State.forceUpdate();\n\t\t}\n\t\t\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\tdsProfiles.edit();\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<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</Group>\n\t\t);\n\t};\n\n\tconst handleAccessTokenRevokeRow = () => {\n\t\tif (dsAccessTokens.getCurrentRecord()) {\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 ')}${dsAccessTokens.getCurrentRecord().user.name} ?`,\n\t\t\t\tasync () => {\n\t\t\t\t\tawait accessTokenApi\n\t\t\t\t\t\t.revoke(dsAccessTokens.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`${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 style={{ height: height }}>\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<Box\n\t\t\t\tstyle={{\n\t\t\t\t\theight: heightTab,\n\t\t\t\t\tdisplay: activeTab === 'users' ? 'flex' : 'none',\n\t\t\t\t\twidth: '100%',\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\tchildren={userColumns}\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t\t<Box\n\t\t\t\tstyle={{\n\t\t\t\t\theight: heightTab,\n\t\t\t\t\tdisplay: activeTab === 'groups' ? 'flex' : 'none',\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\tchildren={groupColumns}\n\t\t\t\t\ttoolbarLeftContent={renderGroupsToolbarActions()}\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t\t<Box\n\t\t\t\tstyle={{\n\t\t\t\t\theight: heightTab,\n\t\t\t\t\tdisplay: activeTab === 'profiles' ? 'flex' : 'none',\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\tchildren={profileColumns}\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t\t<Box\n\t\t\t\tstyle={{\n\t\t\t\t\theight: heightTab,\n\t\t\t\t\tdisplay: activeTab === 'resources' ? 'flex' : 'none',\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</Box>\n\t\t\t<Box\n\t\t\t\tstyle={{\n\t\t\t\t\theight: heightTab,\n\t\t\t\t\tdisplay: activeTab === 'accessTokens' ? 'flex' : 'none',\n\t\t\t\t\twidth: '100%',\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</Box>\n\t\t\t{openedModal === SecurityType.USER ? (\n\t\t\t\t<UserModal\n\t\t\t\t\tonClickOk={handleCloseUserModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dsUsers}\n\t\t\t\t\tonClickCancel={handleCloseUserModal}\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={handleCloseGroupModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dsGroups}\n\t\t\t\t\tonClickCancel={handleCloseGroupModal}\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={handleCloseProfileModal}\n\t\t\t\t\topened={true}\n\t\t\t\t\tdataSource={dsProfiles}\n\t\t\t\t\tonClickCancel={handleCloseProfileModal}\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\tBox,\n\tButton,\n\tText,\n\tFlex,\n\tGroup,\n\tPaper,\n\tuseMantineColorScheme,\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=\"token\"\n\t\t\t\tdataType=\"text\"\n\t\t\t\theader=\"Token API\"\n\t\t\t\tsize={260}\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={260}\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={300}\n\t\t\t\theader=\"Expira em\"\n\t\t\t\trender={(data) => <Text>{data.row.expirationDate ? new Date(data.row.expirationDate).toLocaleDateString() : '-'}</Text>}\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\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();\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 style={{ height: height }}>\n\t\t\t<Box\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}}\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</Box>\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","useFocusTrap","options","handleSave","success","handleCancel","jsx","Modal","getI18nextInstance","ScrollArea","jsxs","Stack","Fragment","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","focusTrapRef","passwordError","setPasswordError","groupApi","useArchbaseRemoteServiceApi","ARCHBASE_IOC_API_TYPE","dsGroups","useArchbaseRemoteDataSource","error","ArchbaseNotifications","profileApi","dsProfiles","currentRecord","value","ArchbasePasswordEdit","ArchbaseSelect","option","Input","ArchbaseCheckbox","ArchbaseAvatarEdit","ArchbaseDataSource","group","UserGroupDto","GroupModal","UserSelectItem","ApiTokenModal","setValue","v1v2Compatibility","handleChange","dateValue","isoString","convertDateToISOString","DateTimePicker","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","templateStore","useArchbaseStore","validator","useArchbaseValidator","setError","activeTab","setActiveTab","userApi","openedModal","setOpenedModal","openedPermissionsModal","setOpenedPermissionsModal","accessTokenApi","t","useArchbaseTranslation","usersV1V2","groupsV1V2","profilesV1V2","usersGridRef","useRef","groupsGridRef","profilesGridRef","resourcesGridRef","accessTokensGridRef","getUserRowId","row","getGroupRowId","getProfileRowId","getResourceRowId","getAccessTokenRowId","dsAccessTokens","isLoadingAccessTokens","emit","builder","dsUsers","isLoadingUsers","isLoadingGroups","isLoadingProfiles","dsResources","isLoadingResources","heightTab","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","handleCloseUserModal","handleCloseGroupModal","handleCloseProfileModal","handleAddProfileExecute","profile","ProfileDto","handleProfileEditRow","handleProfileRemoveRow","handleProfileViewRow","buildProfileRowActions","handleOpenProfilePermissionsModal","handleAccessTokenRevokeRow","processErrorMessage","processDetailErrorMessage","handleClosePermissionsModal","renderUsersToolbarActions","IconPlus","renderGroupsToolbarActions","renderProfilesToolbarActions","renderAccessTokensToolbarActions","Tabs","ArchbaseDataGrid","ArchbaseApiTokenView","apiTokenApi","gridRef","getRowId","useArchbaseDataSource","localDataSourceV1V2","dsApiTokens","isLoading","remoteDataSourceV1V2","columns","handleCreateApiTokenExecute","ApiTokenDto","handleApiTokenRevokeRow","handleCloseApiTokenModal","handleSaveApiToken","callback","apiToken","response","ex","renderToolbarActions"],"mappings":"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","x_google_ignoreList":[0,1]}