@jrapps/my_tickets_dashboard_modals_ui 0.0.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/CreateManageTeamModal/index.js +339 -0
- package/dist/cjs/components/CreateManageTeamModal/index.js.map +7 -0
- package/dist/cjs/components/ManageCreateUserModal/index.js +278 -0
- package/dist/cjs/components/ManageCreateUserModal/index.js.map +7 -0
- package/dist/cjs/index.js +591 -44
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/chunks/chunk-2GZEVEZL.js +257 -0
- package/dist/esm/chunks/chunk-2GZEVEZL.js.map +7 -0
- package/dist/esm/chunks/chunk-4WLRHNEL.js +324 -0
- package/dist/esm/chunks/chunk-4WLRHNEL.js.map +7 -0
- package/dist/esm/components/CreateManageTeamModal/index.js +7 -0
- package/dist/esm/components/CreateManageTeamModal/index.js.map +7 -0
- package/dist/esm/components/ManageCreateUserModal/index.js +7 -0
- package/dist/esm/components/ManageCreateUserModal/index.js.map +7 -0
- package/dist/esm/index.js +8 -0
- package/dist/types/components/CreateManageTeamModal/CreateManageTeamModal.d.ts +6 -0
- package/dist/types/components/CreateManageTeamModal/CreateManageTeamModal.d.ts.map +1 -0
- package/dist/types/components/CreateManageTeamModal/CreateManageTeamModal.types.d.ts +48 -0
- package/dist/types/components/CreateManageTeamModal/CreateManageTeamModal.types.d.ts.map +1 -0
- package/dist/types/components/CreateManageTeamModal/index.d.ts +3 -0
- package/dist/types/components/CreateManageTeamModal/index.d.ts.map +1 -0
- package/dist/types/components/CreateManageTeamModal/permissions-accordion.d.ts +5 -0
- package/dist/types/components/CreateManageTeamModal/permissions-accordion.d.ts.map +1 -0
- package/dist/types/components/CreateManageTeamModal/team-permissions.d.ts +98 -0
- package/dist/types/components/CreateManageTeamModal/team-permissions.d.ts.map +1 -0
- package/dist/types/components/CreateManageTeamModal/useCreateManageTeamModal.d.ts +27 -0
- package/dist/types/components/CreateManageTeamModal/useCreateManageTeamModal.d.ts.map +1 -0
- package/dist/types/components/ManageCreateUserModal/ManageCreateUserModal.d.ts +6 -0
- package/dist/types/components/ManageCreateUserModal/ManageCreateUserModal.d.ts.map +1 -0
- package/dist/types/components/ManageCreateUserModal/ManageCreateUserModal.types.d.ts +53 -0
- package/dist/types/components/ManageCreateUserModal/ManageCreateUserModal.types.d.ts.map +1 -0
- package/dist/types/components/ManageCreateUserModal/index.d.ts +3 -0
- package/dist/types/components/ManageCreateUserModal/index.d.ts.map +1 -0
- package/dist/types/components/ManageCreateUserModal/useManageCreateUserModal.d.ts +28 -0
- package/dist/types/components/ManageCreateUserModal/useManageCreateUserModal.d.ts.map +1 -0
- package/dist/types/components/ManageTicketModal/useManageTicketModal.d.ts +1 -1
- package/dist/types/components/index.d.ts +2 -0
- package/dist/types/components/index.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/cjs/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/index.ts", "../../src/components/ManageTicketModal/ManageTicketModal.tsx", "../../src/components/ManageTicketModal/useManageTicketModal.ts", "../../src/components/ManageTicketModal/status-change-content.tsx", "../../src/components/ManageTicketModal/priority-change-content.tsx", "../../src/components/ManageTicketModal/transfer-ticket-content.tsx", "../../src/components/ManageTicketModal/ManageTicketModal.css"],
|
|
4
|
-
"sourcesContent": ["export * from './components';", "import React from 'react';\nimport type { ManageTicketModalProps } from './ManageTicketModal.types';\nimport { useManageTicketModal } from './useManageTicketModal';\nimport {\n CustomModalLayout,\n Box,\n Text,\n Loader,\n Modal,\n} from '@wix/design-system';\nimport '@wix/design-system/styles-studio.global.css';\n\nimport StatusChangeContent from './status-change-content';\nimport PriorityChangeContent from './priority-change-content';\nimport TransferTicketContent from './transfer-ticket-content';\nimport './ManageTicketModal.css';\n\nexport const ManageTicketModal = React.forwardRef<HTMLDivElement, ManageTicketModalProps>(\n (\n {\n className,\n isOpen,\n id,\n state,\n onClose,\n currentStatus,\n currentPriority,\n ticketNumber,\n currentTeamName,\n },\n ref,\n ) => {\n const {\n isSaving,\n isLoading,\n isError,\n teams,\n newStatus,\n newPriority,\n selectedTeam,\n modalTitle,\n setNewStatus,\n setNewPriority,\n setSelectedTeam,\n handleSave,\n handleCancel,\n } = useManageTicketModal({ id, state, onClose });\n\n const renderContent = () => {\n if (isLoading) {\n return (\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <Loader size=\"medium\" status=\"loading\" text=\"Loading...\" />\n </Box>\n );\n }\n\n if (isError) {\n return (\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <Loader size=\"medium\" status=\"error\" text=\"Error loading data\" />\n </Box>\n );\n }\n\n if (state === 'STATUS_CHANGE') {\n return (\n <StatusChangeContent\n currentStatus={currentStatus ?? ''}\n newStatus={newStatus}\n onStatusChange={setNewStatus}\n />\n );\n }\n\n if (state === 'PRIORITY_CHANGE') {\n return (\n <PriorityChangeContent\n currentPriority={currentPriority ?? ''}\n newPriority={newPriority}\n onPriorityChange={setNewPriority}\n />\n );\n }\n\n if (state === 'TRANSFER_TICKET') {\n return (\n <TransferTicketContent\n currentTeam={currentTeamName}\n teams={teams}\n selectedTeam={selectedTeam}\n onTeamChange={setSelectedTeam}\n />\n );\n }\n\n return null;\n };\n\n return (\n <Modal isOpen={isOpen} ref={ref} className={className}>\n <CustomModalLayout\n width=\"500px\"\n primaryButtonText={isSaving ? <Loader size=\"tiny\" /> : 'Save'}\n secondaryButtonText=\"Cancel\"\n primaryButtonOnClick={handleSave}\n secondaryButtonOnClick={handleCancel}\n showHeaderDivider\n showFooterDivider\n title={modalTitle}\n subtitle={!isLoading ? ticketNumber : ''}\n footnote={\n <Box alignContent=\"center\">\n <Text size=\"small\">\n Powered by <Text size=\"small\" weight=\"bold\">My Tickets</Text>\n </Text>\n </Box>\n }\n content={renderContent()}\n />\n </Modal>\n );\n },\n);\n\nManageTicketModal.displayName = 'ManageTicketModal';\n", "import { useState, useEffect } from 'react';\nimport { httpClient } from '@wix/essentials';\n\nconst BASE_URL = new URL(import.meta.url).origin;\n\nconst STATE_CONFIG = {\n STATUS_CHANGE: {\n title: 'Change Status',\n getUrl: (id: string, value: string | number) =>\n `${BASE_URL}/api/tickets/update-ticket-status?id=${id}&status=${value}`,\n getPayload: (value: string | number) => ({ newStatus: value }),\n },\n PRIORITY_CHANGE: {\n title: 'Change Priority',\n getUrl: (id: string, value: string | number) =>\n `${BASE_URL}/api/tickets/update-ticket-priority?id=${id}&priority=${value}`,\n getPayload: (value: string | number) => ({ newPriority: value }),\n },\n TRANSFER_TICKET: {\n title: 'Transfer Ticket',\n getUrl: (id: string, value: string | number) =>\n `${BASE_URL}/api/tickets/transfer-ticket?id=${id}&teamId=${value}`,\n getPayload: (value: string | number) => ({ newTeamId: value }),\n },\n} as const;\n\ninterface UseManageTicketModalParams {\n id: string;\n state: string;\n onClose: (params: {\n newStatus?: string | number;\n newPriority?: string | number;\n newTeamId?: string | number;\n cancelled?: boolean;\n }) => void;\n}\n\nexport function useManageTicketModal({ id, state, onClose }: UseManageTicketModalParams) {\n const [isSaving, setIsSaving] = useState(false);\n const [newStatus, setNewStatus] = useState<string | number>('');\n const [newPriority, setNewPriority] = useState<string | number>('');\n const [selectedTeam, setSelectedTeam] = useState<string | number>('');\n const [teams, setTeams] = useState<{ _id: string; name: string }[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [isError, setIsError] = useState(false);\n\n const modalTitle = STATE_CONFIG[state as keyof typeof STATE_CONFIG]?.title ?? 'Manage Ticket';\n\n useEffect(() => {\n if (state !== 'TRANSFER_TICKET') {\n setIsLoading(false);\n setIsError(false);\n return;\n }\n\n setIsLoading(true);\n setIsError(false);\n\n const fetchTeams = async () => {\n try {\n const response = await httpClient.fetchWithAuth(`${BASE_URL}/api/teams/teams`);\n const data = await response.json();\n setTeams(data.teams);\n } catch (error) {\n console.error('Error fetching teams:', error);\n setIsError(true);\n } finally {\n setIsLoading(false);\n }\n };\n\n fetchTeams();\n }, [id, state]);\n\n const handleSave = async () => {\n const config = STATE_CONFIG[state as keyof typeof STATE_CONFIG];\n if (!config) return;\n\n const valueMap: Record<string, string | number> = {\n STATUS_CHANGE: newStatus,\n PRIORITY_CHANGE: newPriority,\n TRANSFER_TICKET: selectedTeam,\n };\n const value = valueMap[state];\n if (!value) return;\n\n setIsSaving(true);\n try {\n await httpClient.fetchWithAuth(config.getUrl(id, value), { method: 'PUT' });\n onClose(config.getPayload(value));\n } catch (error) {\n console.error('Error saving:', error);\n } finally {\n setIsSaving(false);\n }\n };\n\n const handleCancel = () => onClose({ cancelled: true });\n\n return {\n // State\n isSaving,\n isLoading,\n isError,\n teams,\n newStatus,\n newPriority,\n selectedTeam,\n modalTitle,\n // Setters\n setNewStatus,\n setNewPriority,\n setSelectedTeam,\n // Handlers\n handleSave,\n handleCancel,\n };\n}\n", "import type { FC } from 'react';\nimport { Box, FormField, Input, Dropdown } from '@wix/design-system';\nimport type { StatusChangeContentProps } from './ManageTicketModal.types';\n\nconst STATUS_LABELS: Record<string, string> = {\n closed: 'Closed',\n in_progress: 'In Progress',\n open: 'Open',\n};\n\nconst StatusChangeContent: FC<StatusChangeContentProps> = ({ currentStatus, newStatus, onStatusChange }) => {\n return (\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Current Status\">\n <Input value={STATUS_LABELS[currentStatus] ?? currentStatus} disabled />\n </FormField>\n <FormField label=\"New Status\">\n <Dropdown\n options={[\n { id: 'open', value: 'Open' },\n { id: 'in_progress', value: 'In Progress' },\n { id: 'closed', value: 'Closed' },\n ]}\n placeholder=\"Select new status\"\n selectedId={newStatus || ''}\n popoverProps={{ appendTo: 'window', zIndex: 9999 }}\n onSelect={(option: any) => onStatusChange(option?.id ?? '')}\n />\n </FormField>\n </Box>\n );\n};\n\nexport default StatusChangeContent;\n", "import type { FC } from 'react';\nimport { Box, FormField, Input, Dropdown } from '@wix/design-system';\nimport type { PriorityChangeContentProps } from './ManageTicketModal.types';\n\nconst PRIORITY_LABELS: Record<string, string> = {\n high: 'High',\n medium: 'Medium',\n low: 'Low',\n};\n\nconst PriorityChangeContent: FC<PriorityChangeContentProps> = ({ currentPriority, newPriority, onPriorityChange }) => {\n return (\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Current Priority\">\n <Input value={PRIORITY_LABELS[currentPriority] ?? currentPriority} disabled />\n </FormField>\n <FormField label=\"New Priority\">\n <Dropdown\n options={[\n { id: 'high', value: 'High' },\n { id: 'medium', value: 'Medium' },\n { id: 'low', value: 'Low' },\n ]}\n placeholder=\"Select new priority\"\n selectedId={newPriority || ''}\n popoverProps={{ appendTo: 'window', zIndex: 9999 }}\n onSelect={(option: any) => onPriorityChange(option?.id ?? '')}\n />\n </FormField>\n </Box>\n );\n};\n\nexport default PriorityChangeContent;\n", "import type { FC } from 'react';\nimport { Box, FormField, Input, Dropdown } from '@wix/design-system';\nimport type { TransferTicketContentProps } from './ManageTicketModal.types';\n\nconst TransferTicketContent: FC<TransferTicketContentProps> = ({ currentTeam, teams, selectedTeam, onTeamChange }) => {\n return (\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Current Team\">\n <Input value={currentTeam} disabled />\n </FormField>\n <FormField label=\"New Team\">\n <Dropdown\n options={teams.map((team) => ({ id: team._id, value: team.name }))}\n placeholder=\"Select new team\"\n selectedId={selectedTeam || ''}\n popoverProps={{ appendTo: 'window', zIndex: 9999 }}\n onSelect={(option: any) => onTeamChange(option?.id ?? '')}\n />\n </FormField>\n </Box>\n );\n};\n\nexport default TransferTicketContent;\n", "if (typeof document !== 'undefined' && !document.getElementById(\"jrapps-style-450fcfe5\")) {\n const s = document.createElement('style');\n s.id = \"jrapps-style-450fcfe5\";\n s.textContent = \".manage-ticket-modal {\\n /* ManageTicketModal base styles */\\n}\\n\";\n document.head.appendChild(s);\n}"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_react", "import_design_system", "import_design_system", "import_jsx_runtime", "import_design_system", "import_jsx_runtime", "import_jsx_runtime", "React"]
|
|
3
|
+
"sources": ["../../src/index.ts", "../../src/components/CreateManageTeamModal/CreateManageTeamModal.tsx", "../../src/components/CreateManageTeamModal/useCreateManageTeamModal.ts", "../../src/components/CreateManageTeamModal/CreateManageTeamModal.types.ts", "../../src/components/CreateManageTeamModal/CreateManageTeamModal.css", "../../src/components/CreateManageTeamModal/permissions-accordion.tsx", "../../src/components/CreateManageTeamModal/team-permissions.ts", "../../src/components/ManageCreateUserModal/ManageCreateUserModal.tsx", "../../src/components/ManageCreateUserModal/useManageCreateUserModal.ts", "../../src/components/ManageCreateUserModal/ManageCreateUserModal.types.ts", "../../src/components/ManageCreateUserModal/ManageCreateUserModal.css", "../../src/components/ManageTicketModal/ManageTicketModal.tsx", "../../src/components/ManageTicketModal/useManageTicketModal.ts", "../../src/components/ManageTicketModal/status-change-content.tsx", "../../src/components/ManageTicketModal/priority-change-content.tsx", "../../src/components/ManageTicketModal/transfer-ticket-content.tsx", "../../src/components/ManageTicketModal/ManageTicketModal.css"],
|
|
4
|
+
"sourcesContent": ["export * from './components';", "import React from 'react';\nimport type { CreateManageTeamModalProps } from './CreateManageTeamModal.types';\nimport { useCreateManageTeamModal } from './useCreateManageTeamModal';\nimport './CreateManageTeamModal.css';\nimport {\n CustomModalLayout,\n Box,\n Text,\n FormField,\n Input,\n ImageViewer,\n Loader,\n Modal,\n} from '@wix/design-system';\nimport '@wix/design-system/styles-studio.global.css';\nimport PermissionsAccordion from './permissions-accordion';\n\nexport const CreateManageTeamModal = React.forwardRef<HTMLDivElement, CreateManageTeamModalProps>(\n ({ className, isOpen, id, state, permissions, onClose }, ref) => {\n const {\n teamData,\n isLoading,\n isSaving,\n error,\n handleFormChange,\n handleSave,\n handleAddImage,\n canEdit,\n } = useCreateManageTeamModal({ id, state, permissions, onClose });\n\n const modalActions = !isLoading\n ? {\n primaryButtonText: isSaving ? <Loader size=\"tiny\" /> : 'Save',\n primaryButtonOnClick: handleSave,\n primaryButtonProps: { disabled: !canEdit },\n secondaryButtonText: !isSaving && state === \"CREATE\" ? 'Cancel' : !isSaving && state === \"EDIT\" ? 'Close' : undefined,\n secondaryButtonOnClick: () => onClose({ cancelled: true }),\n }\n : {};\n\n return (\n <Modal isOpen={isOpen}>\n <div ref={ref} className={className}>\n <CustomModalLayout\n width=\"520px\"\n {...modalActions}\n showHeaderDivider\n showFooterDivider\n title={state === 'EDIT' ? 'Edit Team' : 'Create Team'}\n subtitle={\n state === 'EDIT'\n ? 'Make changes to the team details below.'\n : 'Fill in the details to create a new team.'\n }\n footnote={\n <Box alignContent=\"center\">\n <Text size=\"small\">\n Powered by <Text size=\"small\" weight=\"bold\">My Tickets</Text>\n </Text>\n </Box>\n }\n content={\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n {isLoading ? (\n <Box WebkitJustifyContent=\"center\" alignContent=\"center\">\n <Loader size=\"medium\" status=\"loading\" text=\"Loading data...\" />\n </Box>\n ) : error ? (\n <Box WebkitJustifyContent=\"center\" alignContent=\"center\">\n <Loader size=\"medium\" status=\"error\" text={error} />\n </Box>\n ) : (\n <>\n <Box direction=\"horizontal\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Team Picture\" required>\n <ImageViewer\n disabled={!canEdit}\n height=\"115px\"\n width=\"115px\"\n imageUrl={teamData?.teamPictureUrl || ''}\n onAddImage={handleAddImage}\n />\n </FormField>\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Team Name\" required>\n <Input\n value={teamData?.name || ''}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n handleFormChange('name', e.target.value)\n }\n disabled={!canEdit}\n />\n </FormField>\n <FormField label=\"Team Description\" required>\n <Input\n value={teamData?.description || ''}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n handleFormChange('description', e.target.value)\n }\n disabled={!canEdit}\n />\n </FormField>\n </Box>\n </Box>\n <FormField label=\"Team Email\" required>\n <Input\n suffix={<Box verticalAlign=\"middle\">@mytickets.internal</Box>}\n type=\"email\"\n value={teamData?.email?.replace('@mytickets.internal', '') || ''}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n handleFormChange('email', e.target.value)\n }\n disabled={!canEdit}\n />\n </FormField>\n <Box direction=\"horizontal\" width=\"stretch\" gap=\"10px\">\n <PermissionsAccordion\n selectedPermissions={teamData.permissions || []}\n onChange={(perms: string[]) => handleFormChange('permissions', perms)}\n disabled={!canEdit}\n />\n </Box>\n </>\n )}\n </Box>\n }\n />\n </div>\n </Modal>\n );\n },\n);\n\nCreateManageTeamModal.displayName = 'CreateManageTeamModal';\n", "/**\n * useCreateManageTeamModal\n *\n * Internal hook that encapsulates the logic for CreateManageTeamModal.\n * Keep this file focused on state and side-effects; keep JSX in CreateManageTeamModal.tsx.\n */\nimport { useState, useEffect } from 'react';\nimport { httpClient } from '@wix/essentials';\nimport { dashboard } from '@wix/dashboard';\nimport { type TeamData, DEFAULT_TEAM_DATA } from './CreateManageTeamModal.types';\n\ninterface UseCreateManageTeamModalParams {\n id: string;\n state: string;\n permissions: Record<string, boolean>;\n onClose: (params: {\n newTeamData?: { _id: string; name: string; description: string; teamPictureUrl?: string };\n cancelled?: boolean;\n }) => void;\n}\n\nexport function useCreateManageTeamModal({\n id,\n state,\n permissions,\n onClose,\n}: UseCreateManageTeamModalParams) {\n const [teamData, setTeamData] = useState<TeamData>(DEFAULT_TEAM_DATA);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const [isSaving, setIsSaving] = useState<boolean>(false);\n\n const handleFormChange = (field: keyof TeamData, value: TeamData[keyof TeamData]) => {\n setTeamData((prev) => ({ ...prev, [field]: value }));\n };\n\n const validate = (): string | null => {\n if (!teamData.name.trim()) return 'Team name is required.';\n if (!teamData.email.trim()) return 'Team email is required.';\n return null;\n };\n\n const handleSave = async () => {\n const validationError = validate();\n if (validationError) {\n setError(validationError);\n return;\n }\n\n setIsSaving(true);\n setError(null);\n\n try {\n const baseApiUrl = new URL(import.meta.url).origin;\n const res = await httpClient.fetchWithAuth(\n `${baseApiUrl}/api/teams/teams${state === 'EDIT' ? `?id=${id}` : ''}`,\n {\n method: state === 'EDIT' ? 'PUT' : 'POST',\n body: JSON.stringify(teamData),\n },\n );\n const data = await res.json();\n if (data.success) {\n onClose({\n newTeamData: {\n _id: data.team._id,\n name: data.team.name,\n description: data.team.description,\n teamPictureUrl: data.team.teamPictureUrl,\n },\n });\n }\n } catch (err: unknown) {\n console.error('Error saving team:', err instanceof Error ? err.message : String(err));\n setError('Try again later.');\n } finally {\n setIsSaving(false);\n }\n };\n\n const handleAddImage = () => {\n dashboard.openMediaManager({ multiSelect: false }).then((result: any) => {\n if (result && result.items.length > 0) {\n const imageUrl = result.items[0].url;\n handleFormChange('teamPictureUrl', imageUrl);\n }\n });\n };\n\n useEffect(() => {\n if (state === 'EDIT') {\n setIsLoading(true);\n const fetchTeamDetails = async () => {\n try {\n const baseApiUrl = new URL(import.meta.url).origin;\n const res = await httpClient.fetchWithAuth(\n `${baseApiUrl}/api/teams/teams?id=${id}`,\n {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n },\n );\n const data = await res.json();\n setTeamData(data.team || DEFAULT_TEAM_DATA);\n } catch (err: unknown) {\n console.error(\n 'Error fetching team details:',\n err instanceof Error ? err.message : String(err),\n );\n setError('Try again later.');\n } finally {\n setIsLoading(false);\n }\n };\n fetchTeamDetails();\n }\n }, [id, state]);\n\n return {\n teamData,\n isLoading,\n isSaving,\n error,\n handleFormChange,\n handleSave,\n handleAddImage,\n canEdit: permissions['my-tickets-edit-teams'],\n };\n}\n", "import type { HTMLAttributes } from 'react';\n\nexport interface CreateManageTeamModalProps extends HTMLAttributes<HTMLDivElement> {\n isOpen: boolean;\n id: string;\n state: string;\n permissions: Record<string, boolean>;\n onClose: (params: { newTeamData?: { _id: string; name: string; description: string; teamPictureUrl?: string; }; cancelled?: boolean }) => void;\n}\n\nexport interface TeamModalProps {\n isOpen: boolean;\n id: string;\n state: string;\n permissions: Record<string, boolean>;\n onClose: (params: { newTeamData?: { _id: string; name: string; description: string; teamPictureUrl?: string; }; cancelled?: boolean }) => void;\n}\n\nexport interface PermissionsAccordionProps {\n selectedPermissions: string[];\n onChange: (permissions: string[]) => void;\n disabled: boolean;\n}\n\nexport interface TeamData {\n _id?: string;\n name: string;\n description: string;\n email: string;\n teamPictureUrl?: string;\n agents?: string[];\n assignedTickets?: string[];\n permissions?: string[];\n}\n\nexport const DEFAULT_TEAM_DATA: TeamData = {\n name: '',\n description: '',\n teamPictureUrl: '',\n email: '',\n agents: [],\n assignedTickets: [],\n permissions: [],\n};", "if (typeof document !== 'undefined' && !document.getElementById(\"jrapps-style-41fecb36\")) {\n const s = document.createElement('style');\n s.id = \"jrapps-style-41fecb36\";\n s.textContent = \".create-manage-team-modal {\\n /* CreateManageTeamModal base styles */\\n}\\n\";\n document.head.appendChild(s);\n}", "import type { FC } from 'react';\nimport {\n Box,\n FormField,\n Accordion,\n accordionItemBuilder,\n Layout,\n Cell,\n Checkbox,\n} from '@wix/design-system';\n\nimport { TEAM_PERMISSIONS } from './team-permissions';\nimport type { PermissionsAccordionProps } from './CreateManageTeamModal.types'; // fixed import\n\nconst PermissionsAccordion: FC<PermissionsAccordionProps> = ({\n selectedPermissions,\n onChange,\n disabled,\n}) => {\n const groupedPermissions = TEAM_PERMISSIONS.reduce(\n (acc, perm) => {\n if (!acc[perm.category]) {\n acc[perm.category] = [];\n }\n acc[perm.category].push(perm);\n return acc;\n },\n {} as Record<string, typeof TEAM_PERMISSIONS[number][]>,\n );\n\n return (\n <FormField label=\"Permissions\">\n <Accordion\n horizontalPadding=\"tiny\"\n size=\"tiny\"\n items={Object.entries(groupedPermissions).map(([category, categoryPermissions]) =>\n accordionItemBuilder({\n title: category,\n children: (\n <Box direction=\"vertical\" gap=\"small\">\n <Layout>\n {categoryPermissions.map((perm) => (\n <Cell span={6} key={perm.id}> {/* fixed: use stable perm.id, not index */}\n <Checkbox\n checked={selectedPermissions?.includes(perm.id) || false}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n const isChecked = e.target.checked;\n onChange(\n isChecked\n ? [...(selectedPermissions || []), perm.id]\n : selectedPermissions?.filter((p) => p !== perm.id) || [],\n );\n }}\n disabled={disabled}\n >\n {perm.name}\n </Checkbox>\n </Cell>\n ))}\n </Layout>\n </Box>\n ),\n }),\n )}\n />\n </FormField>\n );\n};\n\nexport default PermissionsAccordion;\n", "export const TEAM_PERMISSIONS = [\n { \"id\": \"my-tickets-transfer-chat-to-agent\", \"name\": \"Transfer Chat to Agent\", \"category\": \"Chat\" },\n { \"id\": \"my-tickets-transfer-chat-to-team\", \"name\": \"Transfer Chat to Team\", \"category\": \"Chat\" },\n { \"id\": \"my-tickets-convert-chat-to-ticket\", \"name\": \"Convert Chat to Ticket\", \"category\": \"Chat\" },\n { \"id\": \"my-tickets-view-chats\", \"name\": \"View Chats\", \"category\": \"Chat\" },\n { \"id\": \"my-tickets-view-single-chat\", \"name\": \"View Single Chat\", \"category\": \"Chat\" },\n { \"id\": \"my-tickets-join-single-chat\", \"name\": \"Join Single Chat\", \"category\": \"Chat\" },\n { \"id\": \"my-tickets-end-single-chat\", \"name\": \"End Single Chat\", \"category\": \"Chat\" },\n { \"id\": \"my-tickets-view-single-ticket\", \"name\": \"View Single Ticket\", \"category\": \"Ticket\" },\n { \"id\": \"my-tickets-single-ticket-send-message\", \"name\": \"Send Message to Single Ticket\", \"category\": \"Ticket\" },\n { \"id\": \"my-tickets-close-single-ticket\", \"name\": \"Close Single Ticket\", \"category\": \"Ticket\" },\n { \"id\": \"my-tickets-reopen-single-ticket\", \"name\": \"Reopen Single Ticket\", \"category\": \"Ticket\" },\n { \"id\": \"my-tickets-change-ticket-priority\", \"name\": \"Change Ticket Priority\", \"category\": \"Ticket\" },\n { \"id\": \"my-tickets-transfer-ticket\", \"name\": \"Transfer Ticket\", \"category\": \"Ticket\" },\n { \"id\": \"my-tickets-change-agent-online-status\", \"name\": \"Change Agent Online Status\", \"category\": \"Agent\" },\n { \"id\": \"my-tickets-notifications-enabled\", \"name\": \"Enable Notifications\", \"category\": \"Notification\" },\n { \"id\": \"my-tickets-create-quick-chat\", \"name\": \"Create Quick Chat\", \"category\": \"Chat\" },\n { \"id\": \"my-tickets-edit-teams\", \"name\": \"Edit Teams\", \"category\": \"Team\" },\n { \"id\": \"my-tickets-edit-accounts\", \"name\": \"Edit Accounts\", \"category\": \"Account\" },\n { \"id\": \"my-tickets-view-teams\", \"name\": \"View Teams\", \"category\": \"Team\" },\n { \"id\": \"my-tickets-view-accounts\", \"name\": \"View Accounts\", \"category\": \"Account\" },\n { \"id\": \"my-tickets-create-teams\", \"name\": \"Create Teams\", \"category\": \"Team\" },\n { \"id\": \"my-tickets-create-accounts\", \"name\": \"Create Accounts\", \"category\": \"Account\" },\n { \"id\": \"my-tickets-view-all-tickets\", \"name\": \"View All Tickets\", \"category\": \"Ticket\" },\n { \"id\": \"my-tickets-create-ticket\", \"name\": \"Create Ticket\", \"category\": \"Ticket\" },\n] as const;\n", "import React from 'react';\nimport type { ManageCreateUserModalProps } from './ManageCreateUserModal.types';\nimport { useManageCreateUserModal } from './useManageCreateUserModal';\nimport './ManageCreateUserModal.css';\nimport {\n CustomModalLayout,\n Box,\n Text,\n FormField,\n Input,\n ImageViewer,\n Dropdown,\n ToggleSwitch,\n Loader,\n Modal,\n} from '@wix/design-system';\nimport '@wix/design-system/styles-studio.global.css';\nimport { dashboard } from '@wix/dashboard';\n\nexport const ManageCreateUserModal = React.forwardRef<HTMLDivElement, ManageCreateUserModalProps>(\n ({ className, id, state, permissions, isOpen, onClose }, ref) => {\n const { userData, isLoading, isSaving, error, teams, handleFormChange, handleSave } =\n useManageCreateUserModal({ id, state });\n\n const canEdit = permissions['my-tickets-edit-accounts'];\n const isDefaultAdmin = userData.role === 'DEFAULT_ADMIN';\n\n const handleAddImage = () => {\n dashboard.openMediaManager({ multiSelect: false }).then((result: any) => {\n if (result && result.items.length > 0) {\n handleFormChange('profilePictureUrl', result.items[0].url);\n }\n });\n };\n\n // Build modal action props only when not loading, to avoid a flash of buttons during fetch.\n const modalActionProps = isLoading\n ? {}\n : {\n primaryButtonText: isSaving ? <Loader size=\"tiny\" /> : 'Save',\n secondaryButtonText: !isSaving\n ? state === 'CREATE'\n ? 'Cancel'\n : 'Close'\n : undefined,\n primaryButtonProps: { disabled: !canEdit },\n primaryButtonOnClick: () => handleSave(onClose),\n secondaryButtonOnClick: () => onClose(),\n };\n\n return (\n <Modal isOpen={isOpen} ref={ref}>\n <CustomModalLayout\n width=\"500px\"\n {...modalActionProps}\n showHeaderDivider\n showFooterDivider\n title={state === 'EDIT' ? 'Edit User Account' : 'Create User Account'}\n subtitle={\n state === 'EDIT'\n ? 'Make changes to the user account details below.'\n : 'Fill in the details to create a new user account.'\n }\n footnote={\n <Box alignContent=\"center\">\n <Text size=\"small\">\n Powered by <Text size=\"small\" weight=\"bold\">My Tickets</Text>\n </Text>\n </Box>\n }\n content={\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n {isLoading ? (\n <Box WebkitJustifyContent=\"center\" alignContent=\"center\">\n <Loader size=\"medium\" status=\"loading\" text=\"Loading User...\" />\n </Box>\n ) : error ? (\n <Box WebkitJustifyContent=\"center\" alignContent=\"center\">\n <Loader size=\"medium\" status=\"error\" text=\"Please try again later.\" />\n </Box>\n ) : (\n <>\n <Box direction=\"horizontal\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Profile Picture\" required>\n <ImageViewer\n height=\"115px\"\n width=\"115px\"\n imageUrl={userData.profilePictureUrl}\n onAddImage={handleAddImage}\n />\n </FormField>\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <FormField\n label={state === 'EDIT' ? 'New Passcode (leave blank to keep)' : 'Passcode'}\n required={state !== 'EDIT'}\n >\n <Input\n type=\"password\"\n value={userData.passcode}\n onChange={(e: any) => handleFormChange('passcode', e.target.value)}\n disabled={!canEdit}\n />\n </FormField>\n <FormField label=\"Team\" required>\n <Dropdown\n disabled={!canEdit || isDefaultAdmin}\n options={\n isDefaultAdmin\n ? []\n : teams.map((team) => ({ id: String(team._id), value: String(team.name) }))\n }\n selectedId={\n typeof userData.team === 'object' && !isDefaultAdmin\n ? userData.team._id\n : ''\n }\n onSelect={(option: any) =>\n handleFormChange('team', { _id: String(option.id), name: String(option.value) })\n }\n />\n </FormField>\n </Box>\n </Box>\n\n <Box direction=\"horizontal\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Name\" required>\n <Input\n value={userData.name}\n onChange={(e: any) => handleFormChange('name', e.target.value)}\n disabled={!canEdit}\n />\n </FormField>\n </Box>\n\n <Box direction=\"horizontal\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Email\" required>\n <Input\n suffix={<Box verticalAlign=\"middle\">@mytickets.internal</Box>}\n type=\"email\"\n // Strip the domain for display; it is re-appended in handleSave before sending.\n value={userData.email.replace('@mytickets.internal', '')}\n onChange={(e: any) => handleFormChange('email', e.target.value)}\n disabled={!canEdit || isDefaultAdmin}\n />\n </FormField>\n </Box>\n\n <FormField label=\"Phone Number\" required>\n <Input\n type=\"tel\"\n value={userData.phoneNumber}\n onChange={(e: any) => handleFormChange('phoneNumber', e.target.value)}\n disabled={!canEdit || isDefaultAdmin}\n />\n </FormField>\n\n <Box direction=\"horizontal\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Role\" required>\n <Input\n value={userData.role}\n onChange={(e: any) => handleFormChange('role', e.target.value)}\n disabled={!canEdit || isDefaultAdmin}\n />\n </FormField>\n <FormField label=\"Is Admin\" required>\n <ToggleSwitch\n size=\"small\"\n checked={userData.isAdmin}\n onChange={() => handleFormChange('isAdmin', !userData.isAdmin)}\n disabled={!canEdit || isDefaultAdmin}\n />\n </FormField>\n </Box>\n </>\n )}\n </Box>\n }\n />\n </Modal>\n );\n },\n);\n\nManageCreateUserModal.displayName = 'ManageCreateUserModal';\n", "/**\n * useCreateManageUsermodal\n *\n * Encapsulates all state and side-effects for CreateManageUsermodal.\n * Keep JSX in CreateManageUsermodal.tsx.\n */\nimport { useState, useEffect } from 'react';\nimport { httpClient } from '@wix/essentials';\nimport type { UserData } from './ManageCreateUserModal.types';\nimport { DEFAULT_USER_DATA } from './ManageCreateUserModal.types';\n\n// Computed once at module level \u2014 avoids repeating the expression in every fetch call.\nconst BASE_API_URL = new URL(import.meta.url).origin;\n\ninterface UseManageCreateUsermodalOptions {\n id: string;\n state: string;\n}\n\nexport function useManageCreateUserModal({ id, state }: UseManageCreateUsermodalOptions) {\n const [userData, setUserData] = useState<UserData>(DEFAULT_USER_DATA);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [isSaving, setIsSaving] = useState<boolean>(false);\n const [error, setError] = useState<boolean>(false);\n const [teams, setTeams] = useState<{ _id: string; name: string }[]>([]);\n\n const handleFormChange = (field: keyof UserData, value: UserData[keyof UserData]) => {\n setUserData((prev) => ({ ...prev, [field]: value }));\n };\n\n useEffect(() => {\n // Teams are needed in both CREATE and EDIT modes.\n const fetchTeams = async () => {\n try {\n const response = await httpClient.fetchWithAuth(`${BASE_API_URL}/api/teams/teams`);\n const result = await response.json();\n if (!result.success) throw new Error(result.error || 'Failed to fetch teams');\n setTeams(result.teams || []);\n } catch (err) {\n console.error('Error fetching teams data:', err);\n }\n };\n\n const fetchUser = async () => {\n try {\n const response = await httpClient.fetchWithAuth(`${BASE_API_URL}/api/users/users?id=${id}`);\n const result = await response.json();\n if (!result.success) throw new Error(result.error || 'Failed to fetch user data');\n setUserData(result.user || DEFAULT_USER_DATA);\n } catch (err) {\n console.error('Error fetching user data:', err);\n setError(true);\n }\n };\n\n const init = async () => {\n setIsLoading(true);\n // Always fetch teams \u2014 the Team dropdown is present in both modes.\n await Promise.all([\n fetchTeams(),\n ...(state === 'EDIT' ? [fetchUser()] : []),\n ]);\n setIsLoading(false);\n };\n\n init();\n }, [id, state]);\n\n const handleSave = async (\n onClose: (result?: { newUserData?: { _id: string; name: string; email: string; team: string; role: string; isAdmin: boolean } }) => void,\n ) => {\n setIsSaving(true);\n try {\n // Build payload: omit passcode when empty (EDIT with no password change),\n // and always send email with the domain suffix.\n const emailWithDomain = userData.email.includes('@')\n ? userData.email\n : `${userData.email}@mytickets.internal`;\n\n const payload: Partial<UserData> & { email: string } = {\n ...userData,\n email: emailWithDomain,\n // Only include passcode in the payload when the user has typed one.\n ...(userData.passcode ? { passcode: userData.passcode } : {}),\n };\n // Never send the passcode field as userId.\n delete (payload as any).passcode;\n\n const res = await httpClient.fetchWithAuth(\n `${BASE_API_URL}/api/users/users${state === 'EDIT' ? `?id=${id}` : ''}`,\n {\n method: state === 'EDIT' ? 'PUT' : 'POST',\n body: JSON.stringify(payload),\n },\n );\n const data = await res.json();\n if (data.success) {\n onClose({ newUserData: data.user });\n }\n } catch (err: unknown) {\n console.error('Error saving user:', err instanceof Error ? err.message : String(err));\n setError(true);\n } finally {\n setIsSaving(false);\n }\n };\n\n return {\n userData,\n isLoading,\n isSaving,\n error,\n teams,\n handleFormChange,\n handleSave,\n };\n}\n", "import type { HTMLAttributes } from 'react';\n\nexport interface ManageCreateUserModalProps extends HTMLAttributes<HTMLDivElement> {\n id: string;\n state: string;\n permissions: Record<string, boolean>;\n isOpen: boolean;\n onClose: (result?: { newUserData?: { _id: string; name: string; email: string; team: string; role: string; isAdmin: boolean }; cancelled?: boolean }) => void;\n}\n\nexport interface AccountModalProps {\n id: string;\n state: string;\n permissions: Record<string, boolean>;\n isOpen: boolean;\n onClose: (result?: { newUserData?: { _id: string; name: string; email: string; team: string; role: string; isAdmin: boolean }; cancelled?: boolean }) => void;\n}\n\nexport interface UserData {\n _id?: string;\n // passcode is kept separate from userId \u2014 never sent back to the server as the user's ID\n passcode: string;\n userId: string;\n email: string;\n name: string;\n phoneNumber: string;\n role: string;\n team: { _id: string; name: string } | string;\n profilePictureUrl: string;\n assignedTickets: string[];\n isAdmin: boolean;\n}\n\nexport const DEFAULT_USER_DATA: UserData = {\n _id: '',\n passcode: '',\n userId: '',\n email: '',\n name: '',\n phoneNumber: '',\n role: '',\n team: '',\n profilePictureUrl: '',\n assignedTickets: [],\n isAdmin: false,\n};\n", "if (typeof document !== 'undefined' && !document.getElementById(\"jrapps-style-03331631\")) {\n const s = document.createElement('style');\n s.id = \"jrapps-style-03331631\";\n s.textContent = \".manage-create-user-modal {\\n /* ManageCreateUserModal base styles */\\n}\\n\";\n document.head.appendChild(s);\n}", "import React from 'react';\nimport type { ManageTicketModalProps } from './ManageTicketModal.types';\nimport { useManageTicketModal } from './useManageTicketModal';\nimport {\n CustomModalLayout,\n Box,\n Text,\n Loader,\n Modal,\n} from '@wix/design-system';\nimport '@wix/design-system/styles-studio.global.css';\n\nimport StatusChangeContent from './status-change-content';\nimport PriorityChangeContent from './priority-change-content';\nimport TransferTicketContent from './transfer-ticket-content';\nimport './ManageTicketModal.css';\n\nexport const ManageTicketModal = React.forwardRef<HTMLDivElement, ManageTicketModalProps>(\n (\n {\n className,\n isOpen,\n id,\n state,\n onClose,\n currentStatus,\n currentPriority,\n ticketNumber,\n currentTeamName,\n },\n ref,\n ) => {\n const {\n isSaving,\n isLoading,\n isError,\n teams,\n newStatus,\n newPriority,\n selectedTeam,\n modalTitle,\n setNewStatus,\n setNewPriority,\n setSelectedTeam,\n handleSave,\n handleCancel,\n } = useManageTicketModal({ id, state, onClose });\n\n const renderContent = () => {\n if (isLoading) {\n return (\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <Loader size=\"medium\" status=\"loading\" text=\"Loading...\" />\n </Box>\n );\n }\n\n if (isError) {\n return (\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <Loader size=\"medium\" status=\"error\" text=\"Error loading data\" />\n </Box>\n );\n }\n\n if (state === 'STATUS_CHANGE') {\n return (\n <StatusChangeContent\n currentStatus={currentStatus ?? ''}\n newStatus={newStatus}\n onStatusChange={setNewStatus}\n />\n );\n }\n\n if (state === 'PRIORITY_CHANGE') {\n return (\n <PriorityChangeContent\n currentPriority={currentPriority ?? ''}\n newPriority={newPriority}\n onPriorityChange={setNewPriority}\n />\n );\n }\n\n if (state === 'TRANSFER_TICKET') {\n return (\n <TransferTicketContent\n currentTeam={currentTeamName}\n teams={teams}\n selectedTeam={selectedTeam}\n onTeamChange={setSelectedTeam}\n />\n );\n }\n\n return null;\n };\n\n return (\n <Modal isOpen={isOpen} ref={ref} className={className}>\n <CustomModalLayout\n width=\"500px\"\n primaryButtonText={isSaving ? <Loader size=\"tiny\" /> : 'Save'}\n secondaryButtonText=\"Cancel\"\n primaryButtonOnClick={handleSave}\n secondaryButtonOnClick={handleCancel}\n showHeaderDivider\n showFooterDivider\n title={modalTitle}\n subtitle={!isLoading ? ticketNumber : ''}\n footnote={\n <Box alignContent=\"center\">\n <Text size=\"small\">\n Powered by <Text size=\"small\" weight=\"bold\">My Tickets</Text>\n </Text>\n </Box>\n }\n content={renderContent()}\n />\n </Modal>\n );\n },\n);\n\nManageTicketModal.displayName = 'ManageTicketModal';\n", "import { useState, useEffect } from 'react';\nimport { httpClient } from '@wix/essentials';\n\nconst BASE_URL = new URL(import.meta.url).origin;\n\nconst STATE_CONFIG = {\n STATUS_CHANGE: {\n title: 'Change Status',\n getUrl: (id: string, value: string | number) =>\n `${BASE_URL}/api/tickets/update-ticket-status?id=${id}&status=${value}`,\n getPayload: (value: string | number) => ({ newStatus: value }),\n },\n PRIORITY_CHANGE: {\n title: 'Change Priority',\n getUrl: (id: string, value: string | number) =>\n `${BASE_URL}/api/tickets/update-ticket-priority?id=${id}&priority=${value}`,\n getPayload: (value: string | number) => ({ newPriority: value }),\n },\n TRANSFER_TICKET: {\n title: 'Transfer Ticket',\n getUrl: (id: string, value: string | number) =>\n `${BASE_URL}/api/tickets/transfer-ticket?id=${id}&teamId=${value}`,\n getPayload: (value: string | number) => ({ newTeamId: value }),\n },\n} as const;\n\ninterface UseManageTicketModalParams {\n id: string;\n state: string;\n onClose: (params: {\n newStatus?: string | number;\n newPriority?: string | number;\n newTeamId?: string | number;\n cancelled?: boolean;\n }) => void;\n}\n\nexport function useManageTicketModal({ id, state, onClose }: UseManageTicketModalParams) {\n const [isSaving, setIsSaving] = useState(false);\n const [newStatus, setNewStatus] = useState<string | number>('');\n const [newPriority, setNewPriority] = useState<string | number>('');\n const [selectedTeam, setSelectedTeam] = useState<string | number>('');\n const [teams, setTeams] = useState<{ _id: string; name: string }[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [isError, setIsError] = useState(false);\n\n const modalTitle = STATE_CONFIG[state as keyof typeof STATE_CONFIG]?.title ?? 'Manage Ticket';\n\n useEffect(() => {\n if (state !== 'TRANSFER_TICKET') {\n setIsLoading(false);\n setIsError(false);\n return;\n }\n\n setIsLoading(true);\n setIsError(false);\n\n const fetchTeams = async () => {\n try {\n const response = await httpClient.fetchWithAuth(`${BASE_URL}/api/teams/teams`);\n const data = await response.json();\n setTeams(data.teams);\n } catch (error) {\n console.error('Error fetching teams:', error);\n setIsError(true);\n } finally {\n setIsLoading(false);\n }\n };\n\n fetchTeams();\n }, [id, state]);\n\n const handleSave = async () => {\n const config = STATE_CONFIG[state as keyof typeof STATE_CONFIG];\n if (!config) return;\n\n const valueMap: Record<string, string | number> = {\n STATUS_CHANGE: newStatus,\n PRIORITY_CHANGE: newPriority,\n TRANSFER_TICKET: selectedTeam,\n };\n const value = valueMap[state];\n if (!value) return;\n\n setIsSaving(true);\n try {\n await httpClient.fetchWithAuth(config.getUrl(id, value), { method: 'PUT' });\n onClose(config.getPayload(value));\n } catch (error) {\n console.error('Error saving:', error);\n } finally {\n setIsSaving(false);\n }\n };\n\n const handleCancel = () => onClose({ cancelled: true });\n\n return {\n // State\n isSaving,\n isLoading,\n isError,\n teams,\n newStatus,\n newPriority,\n selectedTeam,\n modalTitle,\n // Setters\n setNewStatus,\n setNewPriority,\n setSelectedTeam,\n // Handlers\n handleSave,\n handleCancel,\n };\n}\n", "import type { FC } from 'react';\nimport { Box, FormField, Input, Dropdown } from '@wix/design-system';\nimport type { StatusChangeContentProps } from './ManageTicketModal.types';\n\nconst STATUS_LABELS: Record<string, string> = {\n closed: 'Closed',\n in_progress: 'In Progress',\n open: 'Open',\n};\n\nconst StatusChangeContent: FC<StatusChangeContentProps> = ({ currentStatus, newStatus, onStatusChange }) => {\n return (\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Current Status\">\n <Input value={STATUS_LABELS[currentStatus] ?? currentStatus} disabled />\n </FormField>\n <FormField label=\"New Status\">\n <Dropdown\n options={[\n { id: 'open', value: 'Open' },\n { id: 'in_progress', value: 'In Progress' },\n { id: 'closed', value: 'Closed' },\n ]}\n placeholder=\"Select new status\"\n selectedId={newStatus || ''}\n popoverProps={{ appendTo: 'window', zIndex: 9999 }}\n onSelect={(option: any) => onStatusChange(option?.id ?? '')}\n />\n </FormField>\n </Box>\n );\n};\n\nexport default StatusChangeContent;\n", "import type { FC } from 'react';\nimport { Box, FormField, Input, Dropdown } from '@wix/design-system';\nimport type { PriorityChangeContentProps } from './ManageTicketModal.types';\n\nconst PRIORITY_LABELS: Record<string, string> = {\n high: 'High',\n medium: 'Medium',\n low: 'Low',\n};\n\nconst PriorityChangeContent: FC<PriorityChangeContentProps> = ({ currentPriority, newPriority, onPriorityChange }) => {\n return (\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Current Priority\">\n <Input value={PRIORITY_LABELS[currentPriority] ?? currentPriority} disabled />\n </FormField>\n <FormField label=\"New Priority\">\n <Dropdown\n options={[\n { id: 'high', value: 'High' },\n { id: 'medium', value: 'Medium' },\n { id: 'low', value: 'Low' },\n ]}\n placeholder=\"Select new priority\"\n selectedId={newPriority || ''}\n popoverProps={{ appendTo: 'window', zIndex: 9999 }}\n onSelect={(option: any) => onPriorityChange(option?.id ?? '')}\n />\n </FormField>\n </Box>\n );\n};\n\nexport default PriorityChangeContent;\n", "import type { FC } from 'react';\nimport { Box, FormField, Input, Dropdown } from '@wix/design-system';\nimport type { TransferTicketContentProps } from './ManageTicketModal.types';\n\nconst TransferTicketContent: FC<TransferTicketContentProps> = ({ currentTeam, teams, selectedTeam, onTeamChange }) => {\n return (\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Current Team\">\n <Input value={currentTeam} disabled />\n </FormField>\n <FormField label=\"New Team\">\n <Dropdown\n options={teams.map((team) => ({ id: team._id, value: team.name }))}\n placeholder=\"Select new team\"\n selectedId={selectedTeam || ''}\n popoverProps={{ appendTo: 'window', zIndex: 9999 }}\n onSelect={(option: any) => onTeamChange(option?.id ?? '')}\n />\n </FormField>\n </Box>\n );\n};\n\nexport default TransferTicketContent;\n", "if (typeof document !== 'undefined' && !document.getElementById(\"jrapps-style-450fcfe5\")) {\n const s = document.createElement('style');\n s.id = \"jrapps-style-450fcfe5\";\n s.textContent = \".manage-ticket-modal {\\n /* ManageTicketModal base styles */\\n}\\n\";\n document.head.appendChild(s);\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_react", "import_design_system", "import_jsx_runtime", "React", "import_react", "import_react", "import_essentials", "import_design_system", "import_styles_studio_global", "import_dashboard", "import_jsx_runtime", "React", "import_react", "import_react", "import_essentials", "import_design_system", "import_styles_studio_global", "import_design_system", "import_jsx_runtime", "import_design_system", "import_jsx_runtime", "import_design_system", "import_jsx_runtime", "import_jsx_runtime", "React"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
// src/components/ManageCreateUserModal/ManageCreateUserModal.tsx
|
|
2
|
+
import React from "react";
|
|
3
|
+
|
|
4
|
+
// src/components/ManageCreateUserModal/useManageCreateUserModal.ts
|
|
5
|
+
import { useState, useEffect } from "react";
|
|
6
|
+
import { httpClient } from "@wix/essentials";
|
|
7
|
+
|
|
8
|
+
// src/components/ManageCreateUserModal/ManageCreateUserModal.types.ts
|
|
9
|
+
var DEFAULT_USER_DATA = {
|
|
10
|
+
_id: "",
|
|
11
|
+
passcode: "",
|
|
12
|
+
userId: "",
|
|
13
|
+
email: "",
|
|
14
|
+
name: "",
|
|
15
|
+
phoneNumber: "",
|
|
16
|
+
role: "",
|
|
17
|
+
team: "",
|
|
18
|
+
profilePictureUrl: "",
|
|
19
|
+
assignedTickets: [],
|
|
20
|
+
isAdmin: false
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// src/components/ManageCreateUserModal/useManageCreateUserModal.ts
|
|
24
|
+
var BASE_API_URL = new URL(import.meta.url).origin;
|
|
25
|
+
function useManageCreateUserModal({ id, state }) {
|
|
26
|
+
const [userData, setUserData] = useState(DEFAULT_USER_DATA);
|
|
27
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
28
|
+
const [isSaving, setIsSaving] = useState(false);
|
|
29
|
+
const [error, setError] = useState(false);
|
|
30
|
+
const [teams, setTeams] = useState([]);
|
|
31
|
+
const handleFormChange = (field, value) => {
|
|
32
|
+
setUserData((prev) => ({ ...prev, [field]: value }));
|
|
33
|
+
};
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const fetchTeams = async () => {
|
|
36
|
+
try {
|
|
37
|
+
const response = await httpClient.fetchWithAuth(`${BASE_API_URL}/api/teams/teams`);
|
|
38
|
+
const result = await response.json();
|
|
39
|
+
if (!result.success) throw new Error(result.error || "Failed to fetch teams");
|
|
40
|
+
setTeams(result.teams || []);
|
|
41
|
+
} catch (err) {
|
|
42
|
+
console.error("Error fetching teams data:", err);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const fetchUser = async () => {
|
|
46
|
+
try {
|
|
47
|
+
const response = await httpClient.fetchWithAuth(`${BASE_API_URL}/api/users/users?id=${id}`);
|
|
48
|
+
const result = await response.json();
|
|
49
|
+
if (!result.success) throw new Error(result.error || "Failed to fetch user data");
|
|
50
|
+
setUserData(result.user || DEFAULT_USER_DATA);
|
|
51
|
+
} catch (err) {
|
|
52
|
+
console.error("Error fetching user data:", err);
|
|
53
|
+
setError(true);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const init = async () => {
|
|
57
|
+
setIsLoading(true);
|
|
58
|
+
await Promise.all([
|
|
59
|
+
fetchTeams(),
|
|
60
|
+
...state === "EDIT" ? [fetchUser()] : []
|
|
61
|
+
]);
|
|
62
|
+
setIsLoading(false);
|
|
63
|
+
};
|
|
64
|
+
init();
|
|
65
|
+
}, [id, state]);
|
|
66
|
+
const handleSave = async (onClose) => {
|
|
67
|
+
setIsSaving(true);
|
|
68
|
+
try {
|
|
69
|
+
const emailWithDomain = userData.email.includes("@") ? userData.email : `${userData.email}@mytickets.internal`;
|
|
70
|
+
const payload = {
|
|
71
|
+
...userData,
|
|
72
|
+
email: emailWithDomain,
|
|
73
|
+
// Only include passcode in the payload when the user has typed one.
|
|
74
|
+
...userData.passcode ? { passcode: userData.passcode } : {}
|
|
75
|
+
};
|
|
76
|
+
delete payload.passcode;
|
|
77
|
+
const res = await httpClient.fetchWithAuth(
|
|
78
|
+
`${BASE_API_URL}/api/users/users${state === "EDIT" ? `?id=${id}` : ""}`,
|
|
79
|
+
{
|
|
80
|
+
method: state === "EDIT" ? "PUT" : "POST",
|
|
81
|
+
body: JSON.stringify(payload)
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
const data = await res.json();
|
|
85
|
+
if (data.success) {
|
|
86
|
+
onClose({ newUserData: data.user });
|
|
87
|
+
}
|
|
88
|
+
} catch (err) {
|
|
89
|
+
console.error("Error saving user:", err instanceof Error ? err.message : String(err));
|
|
90
|
+
setError(true);
|
|
91
|
+
} finally {
|
|
92
|
+
setIsSaving(false);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
return {
|
|
96
|
+
userData,
|
|
97
|
+
isLoading,
|
|
98
|
+
isSaving,
|
|
99
|
+
error,
|
|
100
|
+
teams,
|
|
101
|
+
handleFormChange,
|
|
102
|
+
handleSave
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// src/components/ManageCreateUserModal/ManageCreateUserModal.css
|
|
107
|
+
if (typeof document !== "undefined" && !document.getElementById("jrapps-style-03331631")) {
|
|
108
|
+
const s = document.createElement("style");
|
|
109
|
+
s.id = "jrapps-style-03331631";
|
|
110
|
+
s.textContent = ".manage-create-user-modal {\n /* ManageCreateUserModal base styles */\n}\n";
|
|
111
|
+
document.head.appendChild(s);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// src/components/ManageCreateUserModal/ManageCreateUserModal.tsx
|
|
115
|
+
import {
|
|
116
|
+
CustomModalLayout,
|
|
117
|
+
Box,
|
|
118
|
+
Text,
|
|
119
|
+
FormField,
|
|
120
|
+
Input,
|
|
121
|
+
ImageViewer,
|
|
122
|
+
Dropdown,
|
|
123
|
+
ToggleSwitch,
|
|
124
|
+
Loader,
|
|
125
|
+
Modal
|
|
126
|
+
} from "@wix/design-system";
|
|
127
|
+
import "@wix/design-system/styles-studio.global.css";
|
|
128
|
+
import { dashboard } from "@wix/dashboard";
|
|
129
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
130
|
+
var ManageCreateUserModal = React.forwardRef(
|
|
131
|
+
({ className, id, state, permissions, isOpen, onClose }, ref) => {
|
|
132
|
+
const { userData, isLoading, isSaving, error, teams, handleFormChange, handleSave } = useManageCreateUserModal({ id, state });
|
|
133
|
+
const canEdit = permissions["my-tickets-edit-accounts"];
|
|
134
|
+
const isDefaultAdmin = userData.role === "DEFAULT_ADMIN";
|
|
135
|
+
const handleAddImage = () => {
|
|
136
|
+
dashboard.openMediaManager({ multiSelect: false }).then((result) => {
|
|
137
|
+
if (result && result.items.length > 0) {
|
|
138
|
+
handleFormChange("profilePictureUrl", result.items[0].url);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
};
|
|
142
|
+
const modalActionProps = isLoading ? {} : {
|
|
143
|
+
primaryButtonText: isSaving ? /* @__PURE__ */ jsx(Loader, { size: "tiny" }) : "Save",
|
|
144
|
+
secondaryButtonText: !isSaving ? state === "CREATE" ? "Cancel" : "Close" : void 0,
|
|
145
|
+
primaryButtonProps: { disabled: !canEdit },
|
|
146
|
+
primaryButtonOnClick: () => handleSave(onClose),
|
|
147
|
+
secondaryButtonOnClick: () => onClose()
|
|
148
|
+
};
|
|
149
|
+
return /* @__PURE__ */ jsx(Modal, { isOpen, ref, children: /* @__PURE__ */ jsx(
|
|
150
|
+
CustomModalLayout,
|
|
151
|
+
{
|
|
152
|
+
width: "500px",
|
|
153
|
+
...modalActionProps,
|
|
154
|
+
showHeaderDivider: true,
|
|
155
|
+
showFooterDivider: true,
|
|
156
|
+
title: state === "EDIT" ? "Edit User Account" : "Create User Account",
|
|
157
|
+
subtitle: state === "EDIT" ? "Make changes to the user account details below." : "Fill in the details to create a new user account.",
|
|
158
|
+
footnote: /* @__PURE__ */ jsx(Box, { alignContent: "center", children: /* @__PURE__ */ jsxs(Text, { size: "small", children: [
|
|
159
|
+
"Powered by ",
|
|
160
|
+
/* @__PURE__ */ jsx(Text, { size: "small", weight: "bold", children: "My Tickets" })
|
|
161
|
+
] }) }),
|
|
162
|
+
content: /* @__PURE__ */ jsx(Box, { direction: "vertical", width: "stretch", gap: "10px", children: isLoading ? /* @__PURE__ */ jsx(Box, { WebkitJustifyContent: "center", alignContent: "center", children: /* @__PURE__ */ jsx(Loader, { size: "medium", status: "loading", text: "Loading User..." }) }) : error ? /* @__PURE__ */ jsx(Box, { WebkitJustifyContent: "center", alignContent: "center", children: /* @__PURE__ */ jsx(Loader, { size: "medium", status: "error", text: "Please try again later." }) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
163
|
+
/* @__PURE__ */ jsxs(Box, { direction: "horizontal", width: "stretch", gap: "10px", children: [
|
|
164
|
+
/* @__PURE__ */ jsx(FormField, { label: "Profile Picture", required: true, children: /* @__PURE__ */ jsx(
|
|
165
|
+
ImageViewer,
|
|
166
|
+
{
|
|
167
|
+
height: "115px",
|
|
168
|
+
width: "115px",
|
|
169
|
+
imageUrl: userData.profilePictureUrl,
|
|
170
|
+
onAddImage: handleAddImage
|
|
171
|
+
}
|
|
172
|
+
) }),
|
|
173
|
+
/* @__PURE__ */ jsxs(Box, { direction: "vertical", width: "stretch", gap: "10px", children: [
|
|
174
|
+
/* @__PURE__ */ jsx(
|
|
175
|
+
FormField,
|
|
176
|
+
{
|
|
177
|
+
label: state === "EDIT" ? "New Passcode (leave blank to keep)" : "Passcode",
|
|
178
|
+
required: state !== "EDIT",
|
|
179
|
+
children: /* @__PURE__ */ jsx(
|
|
180
|
+
Input,
|
|
181
|
+
{
|
|
182
|
+
type: "password",
|
|
183
|
+
value: userData.passcode,
|
|
184
|
+
onChange: (e) => handleFormChange("passcode", e.target.value),
|
|
185
|
+
disabled: !canEdit
|
|
186
|
+
}
|
|
187
|
+
)
|
|
188
|
+
}
|
|
189
|
+
),
|
|
190
|
+
/* @__PURE__ */ jsx(FormField, { label: "Team", required: true, children: /* @__PURE__ */ jsx(
|
|
191
|
+
Dropdown,
|
|
192
|
+
{
|
|
193
|
+
disabled: !canEdit || isDefaultAdmin,
|
|
194
|
+
options: isDefaultAdmin ? [] : teams.map((team) => ({ id: String(team._id), value: String(team.name) })),
|
|
195
|
+
selectedId: typeof userData.team === "object" && !isDefaultAdmin ? userData.team._id : "",
|
|
196
|
+
onSelect: (option) => handleFormChange("team", { _id: String(option.id), name: String(option.value) })
|
|
197
|
+
}
|
|
198
|
+
) })
|
|
199
|
+
] })
|
|
200
|
+
] }),
|
|
201
|
+
/* @__PURE__ */ jsx(Box, { direction: "horizontal", width: "stretch", gap: "10px", children: /* @__PURE__ */ jsx(FormField, { label: "Name", required: true, children: /* @__PURE__ */ jsx(
|
|
202
|
+
Input,
|
|
203
|
+
{
|
|
204
|
+
value: userData.name,
|
|
205
|
+
onChange: (e) => handleFormChange("name", e.target.value),
|
|
206
|
+
disabled: !canEdit
|
|
207
|
+
}
|
|
208
|
+
) }) }),
|
|
209
|
+
/* @__PURE__ */ jsx(Box, { direction: "horizontal", width: "stretch", gap: "10px", children: /* @__PURE__ */ jsx(FormField, { label: "Email", required: true, children: /* @__PURE__ */ jsx(
|
|
210
|
+
Input,
|
|
211
|
+
{
|
|
212
|
+
suffix: /* @__PURE__ */ jsx(Box, { verticalAlign: "middle", children: "@mytickets.internal" }),
|
|
213
|
+
type: "email",
|
|
214
|
+
value: userData.email.replace("@mytickets.internal", ""),
|
|
215
|
+
onChange: (e) => handleFormChange("email", e.target.value),
|
|
216
|
+
disabled: !canEdit || isDefaultAdmin
|
|
217
|
+
}
|
|
218
|
+
) }) }),
|
|
219
|
+
/* @__PURE__ */ jsx(FormField, { label: "Phone Number", required: true, children: /* @__PURE__ */ jsx(
|
|
220
|
+
Input,
|
|
221
|
+
{
|
|
222
|
+
type: "tel",
|
|
223
|
+
value: userData.phoneNumber,
|
|
224
|
+
onChange: (e) => handleFormChange("phoneNumber", e.target.value),
|
|
225
|
+
disabled: !canEdit || isDefaultAdmin
|
|
226
|
+
}
|
|
227
|
+
) }),
|
|
228
|
+
/* @__PURE__ */ jsxs(Box, { direction: "horizontal", width: "stretch", gap: "10px", children: [
|
|
229
|
+
/* @__PURE__ */ jsx(FormField, { label: "Role", required: true, children: /* @__PURE__ */ jsx(
|
|
230
|
+
Input,
|
|
231
|
+
{
|
|
232
|
+
value: userData.role,
|
|
233
|
+
onChange: (e) => handleFormChange("role", e.target.value),
|
|
234
|
+
disabled: !canEdit || isDefaultAdmin
|
|
235
|
+
}
|
|
236
|
+
) }),
|
|
237
|
+
/* @__PURE__ */ jsx(FormField, { label: "Is Admin", required: true, children: /* @__PURE__ */ jsx(
|
|
238
|
+
ToggleSwitch,
|
|
239
|
+
{
|
|
240
|
+
size: "small",
|
|
241
|
+
checked: userData.isAdmin,
|
|
242
|
+
onChange: () => handleFormChange("isAdmin", !userData.isAdmin),
|
|
243
|
+
disabled: !canEdit || isDefaultAdmin
|
|
244
|
+
}
|
|
245
|
+
) })
|
|
246
|
+
] })
|
|
247
|
+
] }) })
|
|
248
|
+
}
|
|
249
|
+
) });
|
|
250
|
+
}
|
|
251
|
+
);
|
|
252
|
+
ManageCreateUserModal.displayName = "ManageCreateUserModal";
|
|
253
|
+
|
|
254
|
+
export {
|
|
255
|
+
ManageCreateUserModal
|
|
256
|
+
};
|
|
257
|
+
//# sourceMappingURL=chunk-2GZEVEZL.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/ManageCreateUserModal/ManageCreateUserModal.tsx", "../../../src/components/ManageCreateUserModal/useManageCreateUserModal.ts", "../../../src/components/ManageCreateUserModal/ManageCreateUserModal.types.ts", "../../../src/components/ManageCreateUserModal/ManageCreateUserModal.css"],
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport type { ManageCreateUserModalProps } from './ManageCreateUserModal.types';\nimport { useManageCreateUserModal } from './useManageCreateUserModal';\nimport './ManageCreateUserModal.css';\nimport {\n CustomModalLayout,\n Box,\n Text,\n FormField,\n Input,\n ImageViewer,\n Dropdown,\n ToggleSwitch,\n Loader,\n Modal,\n} from '@wix/design-system';\nimport '@wix/design-system/styles-studio.global.css';\nimport { dashboard } from '@wix/dashboard';\n\nexport const ManageCreateUserModal = React.forwardRef<HTMLDivElement, ManageCreateUserModalProps>(\n ({ className, id, state, permissions, isOpen, onClose }, ref) => {\n const { userData, isLoading, isSaving, error, teams, handleFormChange, handleSave } =\n useManageCreateUserModal({ id, state });\n\n const canEdit = permissions['my-tickets-edit-accounts'];\n const isDefaultAdmin = userData.role === 'DEFAULT_ADMIN';\n\n const handleAddImage = () => {\n dashboard.openMediaManager({ multiSelect: false }).then((result: any) => {\n if (result && result.items.length > 0) {\n handleFormChange('profilePictureUrl', result.items[0].url);\n }\n });\n };\n\n // Build modal action props only when not loading, to avoid a flash of buttons during fetch.\n const modalActionProps = isLoading\n ? {}\n : {\n primaryButtonText: isSaving ? <Loader size=\"tiny\" /> : 'Save',\n secondaryButtonText: !isSaving\n ? state === 'CREATE'\n ? 'Cancel'\n : 'Close'\n : undefined,\n primaryButtonProps: { disabled: !canEdit },\n primaryButtonOnClick: () => handleSave(onClose),\n secondaryButtonOnClick: () => onClose(),\n };\n\n return (\n <Modal isOpen={isOpen} ref={ref}>\n <CustomModalLayout\n width=\"500px\"\n {...modalActionProps}\n showHeaderDivider\n showFooterDivider\n title={state === 'EDIT' ? 'Edit User Account' : 'Create User Account'}\n subtitle={\n state === 'EDIT'\n ? 'Make changes to the user account details below.'\n : 'Fill in the details to create a new user account.'\n }\n footnote={\n <Box alignContent=\"center\">\n <Text size=\"small\">\n Powered by <Text size=\"small\" weight=\"bold\">My Tickets</Text>\n </Text>\n </Box>\n }\n content={\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n {isLoading ? (\n <Box WebkitJustifyContent=\"center\" alignContent=\"center\">\n <Loader size=\"medium\" status=\"loading\" text=\"Loading User...\" />\n </Box>\n ) : error ? (\n <Box WebkitJustifyContent=\"center\" alignContent=\"center\">\n <Loader size=\"medium\" status=\"error\" text=\"Please try again later.\" />\n </Box>\n ) : (\n <>\n <Box direction=\"horizontal\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Profile Picture\" required>\n <ImageViewer\n height=\"115px\"\n width=\"115px\"\n imageUrl={userData.profilePictureUrl}\n onAddImage={handleAddImage}\n />\n </FormField>\n <Box direction=\"vertical\" width=\"stretch\" gap=\"10px\">\n <FormField\n label={state === 'EDIT' ? 'New Passcode (leave blank to keep)' : 'Passcode'}\n required={state !== 'EDIT'}\n >\n <Input\n type=\"password\"\n value={userData.passcode}\n onChange={(e: any) => handleFormChange('passcode', e.target.value)}\n disabled={!canEdit}\n />\n </FormField>\n <FormField label=\"Team\" required>\n <Dropdown\n disabled={!canEdit || isDefaultAdmin}\n options={\n isDefaultAdmin\n ? []\n : teams.map((team) => ({ id: String(team._id), value: String(team.name) }))\n }\n selectedId={\n typeof userData.team === 'object' && !isDefaultAdmin\n ? userData.team._id\n : ''\n }\n onSelect={(option: any) =>\n handleFormChange('team', { _id: String(option.id), name: String(option.value) })\n }\n />\n </FormField>\n </Box>\n </Box>\n\n <Box direction=\"horizontal\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Name\" required>\n <Input\n value={userData.name}\n onChange={(e: any) => handleFormChange('name', e.target.value)}\n disabled={!canEdit}\n />\n </FormField>\n </Box>\n\n <Box direction=\"horizontal\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Email\" required>\n <Input\n suffix={<Box verticalAlign=\"middle\">@mytickets.internal</Box>}\n type=\"email\"\n // Strip the domain for display; it is re-appended in handleSave before sending.\n value={userData.email.replace('@mytickets.internal', '')}\n onChange={(e: any) => handleFormChange('email', e.target.value)}\n disabled={!canEdit || isDefaultAdmin}\n />\n </FormField>\n </Box>\n\n <FormField label=\"Phone Number\" required>\n <Input\n type=\"tel\"\n value={userData.phoneNumber}\n onChange={(e: any) => handleFormChange('phoneNumber', e.target.value)}\n disabled={!canEdit || isDefaultAdmin}\n />\n </FormField>\n\n <Box direction=\"horizontal\" width=\"stretch\" gap=\"10px\">\n <FormField label=\"Role\" required>\n <Input\n value={userData.role}\n onChange={(e: any) => handleFormChange('role', e.target.value)}\n disabled={!canEdit || isDefaultAdmin}\n />\n </FormField>\n <FormField label=\"Is Admin\" required>\n <ToggleSwitch\n size=\"small\"\n checked={userData.isAdmin}\n onChange={() => handleFormChange('isAdmin', !userData.isAdmin)}\n disabled={!canEdit || isDefaultAdmin}\n />\n </FormField>\n </Box>\n </>\n )}\n </Box>\n }\n />\n </Modal>\n );\n },\n);\n\nManageCreateUserModal.displayName = 'ManageCreateUserModal';\n", "/**\n * useCreateManageUsermodal\n *\n * Encapsulates all state and side-effects for CreateManageUsermodal.\n * Keep JSX in CreateManageUsermodal.tsx.\n */\nimport { useState, useEffect } from 'react';\nimport { httpClient } from '@wix/essentials';\nimport type { UserData } from './ManageCreateUserModal.types';\nimport { DEFAULT_USER_DATA } from './ManageCreateUserModal.types';\n\n// Computed once at module level \u2014 avoids repeating the expression in every fetch call.\nconst BASE_API_URL = new URL(import.meta.url).origin;\n\ninterface UseManageCreateUsermodalOptions {\n id: string;\n state: string;\n}\n\nexport function useManageCreateUserModal({ id, state }: UseManageCreateUsermodalOptions) {\n const [userData, setUserData] = useState<UserData>(DEFAULT_USER_DATA);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [isSaving, setIsSaving] = useState<boolean>(false);\n const [error, setError] = useState<boolean>(false);\n const [teams, setTeams] = useState<{ _id: string; name: string }[]>([]);\n\n const handleFormChange = (field: keyof UserData, value: UserData[keyof UserData]) => {\n setUserData((prev) => ({ ...prev, [field]: value }));\n };\n\n useEffect(() => {\n // Teams are needed in both CREATE and EDIT modes.\n const fetchTeams = async () => {\n try {\n const response = await httpClient.fetchWithAuth(`${BASE_API_URL}/api/teams/teams`);\n const result = await response.json();\n if (!result.success) throw new Error(result.error || 'Failed to fetch teams');\n setTeams(result.teams || []);\n } catch (err) {\n console.error('Error fetching teams data:', err);\n }\n };\n\n const fetchUser = async () => {\n try {\n const response = await httpClient.fetchWithAuth(`${BASE_API_URL}/api/users/users?id=${id}`);\n const result = await response.json();\n if (!result.success) throw new Error(result.error || 'Failed to fetch user data');\n setUserData(result.user || DEFAULT_USER_DATA);\n } catch (err) {\n console.error('Error fetching user data:', err);\n setError(true);\n }\n };\n\n const init = async () => {\n setIsLoading(true);\n // Always fetch teams \u2014 the Team dropdown is present in both modes.\n await Promise.all([\n fetchTeams(),\n ...(state === 'EDIT' ? [fetchUser()] : []),\n ]);\n setIsLoading(false);\n };\n\n init();\n }, [id, state]);\n\n const handleSave = async (\n onClose: (result?: { newUserData?: { _id: string; name: string; email: string; team: string; role: string; isAdmin: boolean } }) => void,\n ) => {\n setIsSaving(true);\n try {\n // Build payload: omit passcode when empty (EDIT with no password change),\n // and always send email with the domain suffix.\n const emailWithDomain = userData.email.includes('@')\n ? userData.email\n : `${userData.email}@mytickets.internal`;\n\n const payload: Partial<UserData> & { email: string } = {\n ...userData,\n email: emailWithDomain,\n // Only include passcode in the payload when the user has typed one.\n ...(userData.passcode ? { passcode: userData.passcode } : {}),\n };\n // Never send the passcode field as userId.\n delete (payload as any).passcode;\n\n const res = await httpClient.fetchWithAuth(\n `${BASE_API_URL}/api/users/users${state === 'EDIT' ? `?id=${id}` : ''}`,\n {\n method: state === 'EDIT' ? 'PUT' : 'POST',\n body: JSON.stringify(payload),\n },\n );\n const data = await res.json();\n if (data.success) {\n onClose({ newUserData: data.user });\n }\n } catch (err: unknown) {\n console.error('Error saving user:', err instanceof Error ? err.message : String(err));\n setError(true);\n } finally {\n setIsSaving(false);\n }\n };\n\n return {\n userData,\n isLoading,\n isSaving,\n error,\n teams,\n handleFormChange,\n handleSave,\n };\n}\n", "import type { HTMLAttributes } from 'react';\n\nexport interface ManageCreateUserModalProps extends HTMLAttributes<HTMLDivElement> {\n id: string;\n state: string;\n permissions: Record<string, boolean>;\n isOpen: boolean;\n onClose: (result?: { newUserData?: { _id: string; name: string; email: string; team: string; role: string; isAdmin: boolean }; cancelled?: boolean }) => void;\n}\n\nexport interface AccountModalProps {\n id: string;\n state: string;\n permissions: Record<string, boolean>;\n isOpen: boolean;\n onClose: (result?: { newUserData?: { _id: string; name: string; email: string; team: string; role: string; isAdmin: boolean }; cancelled?: boolean }) => void;\n}\n\nexport interface UserData {\n _id?: string;\n // passcode is kept separate from userId \u2014 never sent back to the server as the user's ID\n passcode: string;\n userId: string;\n email: string;\n name: string;\n phoneNumber: string;\n role: string;\n team: { _id: string; name: string } | string;\n profilePictureUrl: string;\n assignedTickets: string[];\n isAdmin: boolean;\n}\n\nexport const DEFAULT_USER_DATA: UserData = {\n _id: '',\n passcode: '',\n userId: '',\n email: '',\n name: '',\n phoneNumber: '',\n role: '',\n team: '',\n profilePictureUrl: '',\n assignedTickets: [],\n isAdmin: false,\n};\n", "if (typeof document !== 'undefined' && !document.getElementById(\"jrapps-style-03331631\")) {\n const s = document.createElement('style');\n s.id = \"jrapps-style-03331631\";\n s.textContent = \".manage-create-user-modal {\\n /* ManageCreateUserModal base styles */\\n}\\n\";\n document.head.appendChild(s);\n}"],
|
|
5
|
+
"mappings": ";AAAA,OAAO,WAAW;;;ACMlB,SAAS,UAAU,iBAAiB;AACpC,SAAS,kBAAkB;;;AC0BpB,IAAM,oBAA8B;AAAA,EACzC,KAAK;AAAA,EACL,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,aAAa;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,mBAAmB;AAAA,EACnB,iBAAiB,CAAC;AAAA,EAClB,SAAS;AACX;;;ADjCA,IAAM,eAAe,IAAI,IAAI,YAAY,GAAG,EAAE;AAOvC,SAAS,yBAAyB,EAAE,IAAI,MAAM,GAAoC;AACvF,QAAM,CAAC,UAAU,WAAW,IAAI,SAAmB,iBAAiB;AACpE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAkB,IAAI;AACxD,QAAM,CAAC,UAAU,WAAW,IAAI,SAAkB,KAAK;AACvD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAkB,KAAK;AACjD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAA0C,CAAC,CAAC;AAEtE,QAAM,mBAAmB,CAAC,OAAuB,UAAoC;AACnF,gBAAY,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,EAAE;AAAA,EACrD;AAEA,YAAU,MAAM;AAEd,UAAM,aAAa,YAAY;AAC7B,UAAI;AACF,cAAM,WAAW,MAAM,WAAW,cAAc,GAAG,YAAY,kBAAkB;AACjF,cAAM,SAAS,MAAM,SAAS,KAAK;AACnC,YAAI,CAAC,OAAO,QAAS,OAAM,IAAI,MAAM,OAAO,SAAS,uBAAuB;AAC5E,iBAAS,OAAO,SAAS,CAAC,CAAC;AAAA,MAC7B,SAAS,KAAK;AACZ,gBAAQ,MAAM,8BAA8B,GAAG;AAAA,MACjD;AAAA,IACF;AAEA,UAAM,YAAY,YAAY;AAC5B,UAAI;AACF,cAAM,WAAW,MAAM,WAAW,cAAc,GAAG,YAAY,uBAAuB,EAAE,EAAE;AAC1F,cAAM,SAAS,MAAM,SAAS,KAAK;AACnC,YAAI,CAAC,OAAO,QAAS,OAAM,IAAI,MAAM,OAAO,SAAS,2BAA2B;AAChF,oBAAY,OAAO,QAAQ,iBAAiB;AAAA,MAC9C,SAAS,KAAK;AACZ,gBAAQ,MAAM,6BAA6B,GAAG;AAC9C,iBAAS,IAAI;AAAA,MACf;AAAA,IACF;AAEA,UAAM,OAAO,YAAY;AACvB,mBAAa,IAAI;AAEjB,YAAM,QAAQ,IAAI;AAAA,QAChB,WAAW;AAAA,QACX,GAAI,UAAU,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;AAAA,MAC1C,CAAC;AACD,mBAAa,KAAK;AAAA,IACpB;AAEA,SAAK;AAAA,EACP,GAAG,CAAC,IAAI,KAAK,CAAC;AAEd,QAAM,aAAa,OACjB,YACG;AACH,gBAAY,IAAI;AAChB,QAAI;AAGF,YAAM,kBAAkB,SAAS,MAAM,SAAS,GAAG,IAC/C,SAAS,QACT,GAAG,SAAS,KAAK;AAErB,YAAM,UAAiD;AAAA,QACrD,GAAG;AAAA,QACH,OAAO;AAAA;AAAA,QAEP,GAAI,SAAS,WAAW,EAAE,UAAU,SAAS,SAAS,IAAI,CAAC;AAAA,MAC7D;AAEA,aAAQ,QAAgB;AAExB,YAAM,MAAM,MAAM,WAAW;AAAA,QAC3B,GAAG,YAAY,mBAAmB,UAAU,SAAS,OAAO,EAAE,KAAK,EAAE;AAAA,QACrE;AAAA,UACE,QAAQ,UAAU,SAAS,QAAQ;AAAA,UACnC,MAAM,KAAK,UAAU,OAAO;AAAA,QAC9B;AAAA,MACF;AACA,YAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,UAAI,KAAK,SAAS;AAChB,gBAAQ,EAAE,aAAa,KAAK,KAAK,CAAC;AAAA,MACpC;AAAA,IACF,SAAS,KAAc;AACrB,cAAQ,MAAM,sBAAsB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AACpF,eAAS,IAAI;AAAA,IACf,UAAE;AACA,kBAAY,KAAK;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AEpHA,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,uBAAuB,GAAG;AACxF,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;;;AHDA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,OAAO;AACP,SAAS,iBAAiB;AAsBc,SA0CxB,UA1CwB,KA0B1B,YA1B0B;AApBjC,IAAM,wBAAwB,MAAM;AAAA,EACzC,CAAC,EAAE,WAAW,IAAI,OAAO,aAAa,QAAQ,QAAQ,GAAG,QAAQ;AAC/D,UAAM,EAAE,UAAU,WAAW,UAAU,OAAO,OAAO,kBAAkB,WAAW,IAChF,yBAAyB,EAAE,IAAI,MAAM,CAAC;AAExC,UAAM,UAAU,YAAY,0BAA0B;AACtD,UAAM,iBAAiB,SAAS,SAAS;AAEzC,UAAM,iBAAiB,MAAM;AAC3B,gBAAU,iBAAiB,EAAE,aAAa,MAAM,CAAC,EAAE,KAAK,CAAC,WAAgB;AACvE,YAAI,UAAU,OAAO,MAAM,SAAS,GAAG;AACrC,2BAAiB,qBAAqB,OAAO,MAAM,CAAC,EAAE,GAAG;AAAA,QAC3D;AAAA,MACF,CAAC;AAAA,IACH;AAGA,UAAM,mBAAmB,YACrB,CAAC,IACD;AAAA,MACE,mBAAmB,WAAW,oBAAC,UAAO,MAAK,QAAO,IAAK;AAAA,MACvD,qBAAqB,CAAC,WAClB,UAAU,WACR,WACA,UACF;AAAA,MACJ,oBAAoB,EAAE,UAAU,CAAC,QAAQ;AAAA,MACzC,sBAAsB,MAAM,WAAW,OAAO;AAAA,MAC9C,wBAAwB,MAAM,QAAQ;AAAA,IACxC;AAEJ,WACE,oBAAC,SAAM,QAAgB,KACrB;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACL,GAAG;AAAA,QACJ,mBAAiB;AAAA,QACjB,mBAAiB;AAAA,QACjB,OAAO,UAAU,SAAS,sBAAsB;AAAA,QAChD,UACE,UAAU,SACN,oDACA;AAAA,QAEN,UACE,oBAAC,OAAI,cAAa,UAChB,+BAAC,QAAK,MAAK,SAAQ;AAAA;AAAA,UACN,oBAAC,QAAK,MAAK,SAAQ,QAAO,QAAO,wBAAU;AAAA,WACxD,GACF;AAAA,QAEF,SACE,oBAAC,OAAI,WAAU,YAAW,OAAM,WAAU,KAAI,QAC3C,sBACC,oBAAC,OAAI,sBAAqB,UAAS,cAAa,UAC9C,8BAAC,UAAO,MAAK,UAAS,QAAO,WAAU,MAAK,mBAAkB,GAChE,IACE,QACF,oBAAC,OAAI,sBAAqB,UAAS,cAAa,UAC9C,8BAAC,UAAO,MAAK,UAAS,QAAO,SAAQ,MAAK,2BAA0B,GACtE,IAEA,iCACE;AAAA,+BAAC,OAAI,WAAU,cAAa,OAAM,WAAU,KAAI,QAC9C;AAAA,gCAAC,aAAU,OAAM,mBAAkB,UAAQ,MACzC;AAAA,cAAC;AAAA;AAAA,gBACC,QAAO;AAAA,gBACP,OAAM;AAAA,gBACN,UAAU,SAAS;AAAA,gBACnB,YAAY;AAAA;AAAA,YACd,GACF;AAAA,YACA,qBAAC,OAAI,WAAU,YAAW,OAAM,WAAU,KAAI,QAC5C;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAO,UAAU,SAAS,uCAAuC;AAAA,kBACjE,UAAU,UAAU;AAAA,kBAEpB;AAAA,oBAAC;AAAA;AAAA,sBACC,MAAK;AAAA,sBACL,OAAO,SAAS;AAAA,sBAChB,UAAU,CAAC,MAAW,iBAAiB,YAAY,EAAE,OAAO,KAAK;AAAA,sBACjE,UAAU,CAAC;AAAA;AAAA,kBACb;AAAA;AAAA,cACF;AAAA,cACA,oBAAC,aAAU,OAAM,QAAO,UAAQ,MAC9B;AAAA,gBAAC;AAAA;AAAA,kBACC,UAAU,CAAC,WAAW;AAAA,kBACtB,SACE,iBACI,CAAC,IACD,MAAM,IAAI,CAAC,UAAU,EAAE,IAAI,OAAO,KAAK,GAAG,GAAG,OAAO,OAAO,KAAK,IAAI,EAAE,EAAE;AAAA,kBAE9E,YACE,OAAO,SAAS,SAAS,YAAY,CAAC,iBAClC,SAAS,KAAK,MACd;AAAA,kBAEN,UAAU,CAAC,WACT,iBAAiB,QAAQ,EAAE,KAAK,OAAO,OAAO,EAAE,GAAG,MAAM,OAAO,OAAO,KAAK,EAAE,CAAC;AAAA;AAAA,cAEnF,GACF;AAAA,eACF;AAAA,aACF;AAAA,UAEA,oBAAC,OAAI,WAAU,cAAa,OAAM,WAAU,KAAI,QAC9C,8BAAC,aAAU,OAAM,QAAO,UAAQ,MAC9B;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,SAAS;AAAA,cAChB,UAAU,CAAC,MAAW,iBAAiB,QAAQ,EAAE,OAAO,KAAK;AAAA,cAC7D,UAAU,CAAC;AAAA;AAAA,UACb,GACF,GACF;AAAA,UAEA,oBAAC,OAAI,WAAU,cAAa,OAAM,WAAU,KAAI,QAC9C,8BAAC,aAAU,OAAM,SAAQ,UAAQ,MAC/B;AAAA,YAAC;AAAA;AAAA,cACC,QAAQ,oBAAC,OAAI,eAAc,UAAS,iCAAmB;AAAA,cACvD,MAAK;AAAA,cAEL,OAAO,SAAS,MAAM,QAAQ,uBAAuB,EAAE;AAAA,cACvD,UAAU,CAAC,MAAW,iBAAiB,SAAS,EAAE,OAAO,KAAK;AAAA,cAC9D,UAAU,CAAC,WAAW;AAAA;AAAA,UACxB,GACF,GACF;AAAA,UAEA,oBAAC,aAAU,OAAM,gBAAe,UAAQ,MACtC;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO,SAAS;AAAA,cAChB,UAAU,CAAC,MAAW,iBAAiB,eAAe,EAAE,OAAO,KAAK;AAAA,cACpE,UAAU,CAAC,WAAW;AAAA;AAAA,UACxB,GACF;AAAA,UAEA,qBAAC,OAAI,WAAU,cAAa,OAAM,WAAU,KAAI,QAC9C;AAAA,gCAAC,aAAU,OAAM,QAAO,UAAQ,MAC9B;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,SAAS;AAAA,gBAChB,UAAU,CAAC,MAAW,iBAAiB,QAAQ,EAAE,OAAO,KAAK;AAAA,gBAC7D,UAAU,CAAC,WAAW;AAAA;AAAA,YACxB,GACF;AAAA,YACA,oBAAC,aAAU,OAAM,YAAW,UAAQ,MAClC;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,SAAS;AAAA,gBAClB,UAAU,MAAM,iBAAiB,WAAW,CAAC,SAAS,OAAO;AAAA,gBAC7D,UAAU,CAAC,WAAW;AAAA;AAAA,YACxB,GACF;AAAA,aACF;AAAA,WACF,GAEJ;AAAA;AAAA,IAEJ,GACF;AAAA,EAEJ;AACF;AAEA,sBAAsB,cAAc;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|