@trii/components 2.0.39 → 2.0.41
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/index.js +116 -69
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/components/EditContactModal/components/Header/Header.d.ts +8 -2
- package/dist/cjs/types/components/EditContactModal/components/Header/components/ContactName/ContactName.d.ts +12 -0
- package/dist/cjs/types/components/EditContactModal/components/Header/components/index.d.ts +1 -0
- package/dist/esm/index.js +117 -70
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/components/EditContactModal/components/Header/Header.d.ts +8 -2
- package/dist/esm/types/components/EditContactModal/components/Header/components/ContactName/ContactName.d.ts +12 -0
- package/dist/esm/types/components/EditContactModal/components/Header/components/index.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IContactTag } from '@trii/types/dist/Contacts';
|
|
1
|
+
import { IContactTag, IContact, IBusiness } from '@trii/types/dist/Contacts/contacts';
|
|
2
2
|
import type { ChangeEvent, RefObject } from 'react';
|
|
3
3
|
type HeaderProps = {
|
|
4
4
|
imgUrl?: string;
|
|
@@ -12,6 +12,12 @@ type HeaderProps = {
|
|
|
12
12
|
isUploadingPhoto: boolean;
|
|
13
13
|
onDeletePhoto: () => void;
|
|
14
14
|
isDeletingPhoto: boolean;
|
|
15
|
+
contactType?: 'contact' | 'business' | 'unknown';
|
|
16
|
+
firstName?: string;
|
|
17
|
+
lastName?: string;
|
|
18
|
+
name?: string;
|
|
19
|
+
entityId?: string;
|
|
20
|
+
onEntityUpdated?: (data: IContact | IBusiness) => void;
|
|
15
21
|
};
|
|
16
|
-
declare const Header: ({ imgUrl, displayName, onError, tags, onEditTags, onUploadPhoto, onPhotoFileChange, photoInputRef, isUploadingPhoto, onDeletePhoto, isDeletingPhoto, }: HeaderProps) => import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
declare const Header: ({ imgUrl, displayName, onError, tags, onEditTags, onUploadPhoto, onPhotoFileChange, photoInputRef, isUploadingPhoto, onDeletePhoto, isDeletingPhoto, contactType, firstName, lastName, name, entityId, onEntityUpdated, }: HeaderProps) => import("react/jsx-runtime").JSX.Element;
|
|
17
23
|
export default Header;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IContact, IBusiness } from '@trii/types/dist/Contacts/contacts';
|
|
2
|
+
export type ContactNameProps = {
|
|
3
|
+
displayName: string;
|
|
4
|
+
contactType?: 'contact' | 'business' | 'unknown';
|
|
5
|
+
firstName?: string;
|
|
6
|
+
lastName?: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
entityId?: string;
|
|
9
|
+
onEntityUpdated?: (data: IContact | IBusiness) => void;
|
|
10
|
+
};
|
|
11
|
+
declare const ContactName: ({ displayName, contactType, firstName, lastName, name, entityId, onEntityUpdated, }: ContactNameProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default ContactName;
|
package/dist/esm/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React$1 from 'react';
|
|
2
2
|
import React__default, { useCallback, useEffect, createContext, useContext, useState, useMemo, Children, isValidElement, cloneElement, useRef } from 'react';
|
|
3
|
-
import { styled as styled$5, Box as Box$2, IconButton as IconButton$2, Avatar, Typography as Typography$2, CircularProgress as CircularProgress$2, Tooltip, Chip as Chip$2, Popper as Popper$2, ClickAwayListener, CardContent, Stack as Stack$2, Popover as Popover$2,
|
|
3
|
+
import { styled as styled$5, Box as Box$2, IconButton as IconButton$2, Avatar, Typography as Typography$2, CircularProgress as CircularProgress$2, Tooltip, Chip as Chip$2, Popper as Popper$2, ClickAwayListener, CardContent, Stack as Stack$2, Popover as Popover$2, TextField as TextField$1, Autocomplete, Divider, Select as Select$2, MenuItem as MenuItem$2, FormControl as FormControl$2, Button as Button$2, Menu as Menu$2, ListItemIcon, ListItemText, Modal as Modal$2, Grid, Backdrop as Backdrop$2, Fade as Fade$2 } from '@mui/material';
|
|
4
4
|
import { withEmotionCache, ThemeContext, CacheProvider, Global, css, keyframes } from '@emotion/react';
|
|
5
5
|
import * as ReactDOM from 'react-dom';
|
|
6
6
|
import ReactDOM__default from 'react-dom';
|
|
@@ -8998,6 +8998,10 @@ var utils = /*#__PURE__*/Object.freeze({
|
|
|
8998
8998
|
useIsFocusVisible: useIsFocusVisible
|
|
8999
8999
|
});
|
|
9000
9000
|
|
|
9001
|
+
var Edit$1 = createSvgIcon$1( /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
9002
|
+
d: "M3 17.25V21h3.75L17.81 9.94l-3.75-3.75zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.9959.9959 0 0 0-1.41 0l-1.83 1.83 3.75 3.75z"
|
|
9003
|
+
}), 'Edit');
|
|
9004
|
+
|
|
9001
9005
|
var Email$1 = createSvgIcon$1( /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
9002
9006
|
d: "M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2m0 4-8 5-8-5V6l8 5 8-5z"
|
|
9003
9007
|
}), 'Email');
|
|
@@ -9020,6 +9024,10 @@ var PhoneEnabled = createSvgIcon$1( /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
|
9020
9024
|
d: "m17.38 10.79-2.2-2.2c-.28-.28-.36-.67-.25-1.02.37-1.12.57-2.32.57-3.57 0-.55.45-1 1-1H20c.55 0 1 .45 1 1 0 9.39-7.61 17-17 17-.55 0-1-.45-1-1v-3.49c0-.55.45-1 1-1 1.24 0 2.45-.2 3.57-.57.35-.12.75-.03 1.02.24l2.2 2.2c2.83-1.45 5.15-3.76 6.59-6.59"
|
|
9021
9025
|
}), 'PhoneEnabled');
|
|
9022
9026
|
|
|
9027
|
+
var Save$1 = createSvgIcon$1( /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
9028
|
+
d: "M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3m3-10H5V5h10z"
|
|
9029
|
+
}), 'Save');
|
|
9030
|
+
|
|
9023
9031
|
var Star = createSvgIcon$1( /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
9024
9032
|
d: "M12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"
|
|
9025
9033
|
}), 'Star');
|
|
@@ -15379,7 +15387,6 @@ default_1$e = Label.default = (0, _createSvgIcon$d.default)( /*#__PURE__*/(0, _j
|
|
|
15379
15387
|
const noop$3 = (key) => key;
|
|
15380
15388
|
const TranslationContext = createContext(noop$3);
|
|
15381
15389
|
const TranslationProvider = ({ t, children }) => {
|
|
15382
|
-
console.log('[TranslationProvider] t fn:', t?.name || 'anonymous', t);
|
|
15383
15390
|
return jsxRuntimeExports.jsx(TranslationContext.Provider, { value: t, children: children });
|
|
15384
15391
|
};
|
|
15385
15392
|
const useTranslationContext = () => {
|
|
@@ -15391,7 +15398,6 @@ const useTranslationContext = () => {
|
|
|
15391
15398
|
return (...args) => {
|
|
15392
15399
|
const [key, ...rest] = args;
|
|
15393
15400
|
const result = t(key, ...rest);
|
|
15394
|
-
console.log('[useTranslationContext] key:', key, 'args:', rest, 'result:', result);
|
|
15395
15401
|
return result;
|
|
15396
15402
|
};
|
|
15397
15403
|
};
|
|
@@ -15451,6 +15457,87 @@ const Tags = ({ tags, onEditTags }) => {
|
|
|
15451
15457
|
} }, tag.id))) })] }) })] }));
|
|
15452
15458
|
};
|
|
15453
15459
|
|
|
15460
|
+
const EditContactApiContext = createContext(null);
|
|
15461
|
+
const EditContactApiProvider = EditContactApiContext.Provider;
|
|
15462
|
+
const useEditContactApi = () => {
|
|
15463
|
+
return useContext(EditContactApiContext);
|
|
15464
|
+
};
|
|
15465
|
+
|
|
15466
|
+
const NameText = styled$5(Typography$2)({
|
|
15467
|
+
whiteSpace: 'nowrap',
|
|
15468
|
+
overflow: 'hidden',
|
|
15469
|
+
textOverflow: 'ellipsis',
|
|
15470
|
+
maxWidth: 360,
|
|
15471
|
+
textAlign: 'center',
|
|
15472
|
+
});
|
|
15473
|
+
const NameWrapper = styled$5(Box$2)({
|
|
15474
|
+
display: 'flex',
|
|
15475
|
+
alignItems: 'center',
|
|
15476
|
+
justifyContent: 'center',
|
|
15477
|
+
gap: '8px',
|
|
15478
|
+
width: '100%',
|
|
15479
|
+
'&:hover .edit-icon': {
|
|
15480
|
+
opacity: 1,
|
|
15481
|
+
visibility: 'visible',
|
|
15482
|
+
},
|
|
15483
|
+
});
|
|
15484
|
+
const EditButton = styled$5(IconButton$2)({
|
|
15485
|
+
opacity: 0,
|
|
15486
|
+
visibility: 'hidden',
|
|
15487
|
+
transition: 'all 0.2s',
|
|
15488
|
+
});
|
|
15489
|
+
const ContactName = ({ displayName, contactType, firstName, lastName, name, entityId, onEntityUpdated, }) => {
|
|
15490
|
+
const api = useEditContactApi();
|
|
15491
|
+
const [isEditing, setIsEditing] = useState(false);
|
|
15492
|
+
const [loading, setLoading] = useState(false);
|
|
15493
|
+
const [values, setValues] = useState({
|
|
15494
|
+
firstName: firstName || '',
|
|
15495
|
+
lastName: lastName || '',
|
|
15496
|
+
name: name || '',
|
|
15497
|
+
});
|
|
15498
|
+
useEffect(() => {
|
|
15499
|
+
setValues({
|
|
15500
|
+
firstName: firstName || '',
|
|
15501
|
+
lastName: lastName || '',
|
|
15502
|
+
name: name || '',
|
|
15503
|
+
});
|
|
15504
|
+
}, [firstName, lastName, name]);
|
|
15505
|
+
const handleSave = async () => {
|
|
15506
|
+
if (!api || !entityId || !contactType || contactType === 'unknown')
|
|
15507
|
+
return;
|
|
15508
|
+
setLoading(true);
|
|
15509
|
+
try {
|
|
15510
|
+
let body = {};
|
|
15511
|
+
if (contactType === 'contact') {
|
|
15512
|
+
body = { firstName: values.firstName, lastName: values.lastName };
|
|
15513
|
+
}
|
|
15514
|
+
else if (contactType === 'business') {
|
|
15515
|
+
body = { name: values.name };
|
|
15516
|
+
}
|
|
15517
|
+
const updated = await api.updateEntity({
|
|
15518
|
+
entityType: contactType,
|
|
15519
|
+
entityId,
|
|
15520
|
+
body,
|
|
15521
|
+
});
|
|
15522
|
+
if (updated && onEntityUpdated) {
|
|
15523
|
+
onEntityUpdated(updated);
|
|
15524
|
+
}
|
|
15525
|
+
setIsEditing(false);
|
|
15526
|
+
}
|
|
15527
|
+
catch (err) {
|
|
15528
|
+
console.error('Failed to update name', err);
|
|
15529
|
+
}
|
|
15530
|
+
finally {
|
|
15531
|
+
setLoading(false);
|
|
15532
|
+
}
|
|
15533
|
+
};
|
|
15534
|
+
const showEdit = contactType === 'contact' || contactType === 'business';
|
|
15535
|
+
if (isEditing) {
|
|
15536
|
+
return (jsxRuntimeExports.jsxs(Box$2, { sx: { display: 'flex', alignItems: 'center', gap: 1, mt: 1 }, children: [contactType === 'contact' ? (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(TextField$1, { value: values.firstName, onChange: (e) => setValues({ ...values, firstName: e.target.value }), size: "small", placeholder: "First Name", sx: { width: 140 } }), jsxRuntimeExports.jsx(TextField$1, { value: values.lastName, onChange: (e) => setValues({ ...values, lastName: e.target.value }), size: "small", placeholder: "Last Name", sx: { width: 140 } })] })) : (jsxRuntimeExports.jsx(TextField$1, { value: values.name, onChange: (e) => setValues({ ...values, name: e.target.value }), size: "small", placeholder: "Name", sx: { width: 280 } })), jsxRuntimeExports.jsx(IconButton$2, { onClick: handleSave, disabled: loading, color: "primary", children: loading ? jsxRuntimeExports.jsx(CircularProgress$2, { size: 24 }) : jsxRuntimeExports.jsx(Save$1, {}) })] }));
|
|
15537
|
+
}
|
|
15538
|
+
return (jsxRuntimeExports.jsxs(NameWrapper, { children: [jsxRuntimeExports.jsx(NameText, { variant: "h6", title: displayName, children: displayName }), showEdit && (jsxRuntimeExports.jsx(EditButton, { size: "small", onClick: () => setIsEditing(true), className: "edit-icon", children: jsxRuntimeExports.jsx(Edit$1, { fontSize: "small" }) }))] }));
|
|
15539
|
+
};
|
|
15540
|
+
|
|
15454
15541
|
var Delete = {};
|
|
15455
15542
|
|
|
15456
15543
|
var _interopRequireDefault$c = interopRequireDefaultExports;
|
|
@@ -15526,16 +15613,9 @@ const HeaderContainer = styled$5(Box$2)({
|
|
|
15526
15613
|
marginBottom: '20px',
|
|
15527
15614
|
position: 'relative',
|
|
15528
15615
|
});
|
|
15529
|
-
const
|
|
15530
|
-
whiteSpace: 'nowrap',
|
|
15531
|
-
overflow: 'hidden',
|
|
15532
|
-
textOverflow: 'ellipsis',
|
|
15533
|
-
maxWidth: 360,
|
|
15534
|
-
textAlign: 'center',
|
|
15535
|
-
});
|
|
15536
|
-
const Header = ({ imgUrl, displayName, onError, tags, onEditTags, onUploadPhoto, onPhotoFileChange, photoInputRef, isUploadingPhoto, onDeletePhoto, isDeletingPhoto, }) => {
|
|
15616
|
+
const Header = ({ imgUrl, displayName, onError, tags, onEditTags, onUploadPhoto, onPhotoFileChange, photoInputRef, isUploadingPhoto, onDeletePhoto, isDeletingPhoto, contactType, firstName, lastName, name, entityId, onEntityUpdated, }) => {
|
|
15537
15617
|
const avatarAlt = `Avatar for ${displayName}`;
|
|
15538
|
-
return (jsxRuntimeExports.jsxs(HeaderContainer, { children: [jsxRuntimeExports.jsx("input", { ref: photoInputRef, type: "file", accept: "image/*", onChange: onPhotoFileChange, style: { display: 'none' } }), jsxRuntimeExports.jsx(AvatarWithActions, { src: imgUrl, alt: avatarAlt, onError: () => onError?.(new Error('Failed to load avatar')), onUpload: onUploadPhoto, isUploading: isUploadingPhoto, onDelete: onDeletePhoto, isDeleting: isDeletingPhoto }), jsxRuntimeExports.jsx(ContactName, {
|
|
15618
|
+
return (jsxRuntimeExports.jsxs(HeaderContainer, { children: [jsxRuntimeExports.jsx("input", { ref: photoInputRef, type: "file", accept: "image/*", onChange: onPhotoFileChange, style: { display: 'none' } }), jsxRuntimeExports.jsx(AvatarWithActions, { src: imgUrl, alt: avatarAlt, onError: () => onError?.(new Error('Failed to load avatar')), onUpload: onUploadPhoto, isUploading: isUploadingPhoto, onDelete: onDeletePhoto, isDeleting: isDeletingPhoto }), jsxRuntimeExports.jsx(ContactName, { displayName: displayName, contactType: contactType, firstName: firstName, lastName: lastName, name: name, entityId: entityId, onEntityUpdated: onEntityUpdated }), jsxRuntimeExports.jsx(Tags, { tags: tags, onEditTags: onEditTags })] }));
|
|
15539
15619
|
};
|
|
15540
15620
|
|
|
15541
15621
|
var ArrowBack = {};
|
|
@@ -26306,12 +26386,6 @@ const useEditEntity = () => {
|
|
|
26306
26386
|
return ctx;
|
|
26307
26387
|
};
|
|
26308
26388
|
|
|
26309
|
-
const EditContactApiContext = createContext(null);
|
|
26310
|
-
const EditContactApiProvider = EditContactApiContext.Provider;
|
|
26311
|
-
const useEditContactApi = () => {
|
|
26312
|
-
return useContext(EditContactApiContext);
|
|
26313
|
-
};
|
|
26314
|
-
|
|
26315
26389
|
const resolveUserLabel = ({ userId, users, currentUser, }) => {
|
|
26316
26390
|
if (!userId)
|
|
26317
26391
|
return null;
|
|
@@ -52451,7 +52525,7 @@ const StyledSaveCancelButton$1 = styled$5(IconButton$2)({
|
|
|
52451
52525
|
},
|
|
52452
52526
|
});
|
|
52453
52527
|
const EntityInfoLabel = (props) => {
|
|
52454
|
-
const { title, value, isNotEditable, displayValue, baseUrl, spaceId, minWidth, onEntityUpdated
|
|
52528
|
+
const { title, value, isNotEditable, displayValue, baseUrl, spaceId, minWidth, onEntityUpdated } = props;
|
|
52455
52529
|
const t = useTranslationContext();
|
|
52456
52530
|
const inputType = props.inputType ?? 'text';
|
|
52457
52531
|
const [isEditing, setIsEditing] = useState(false);
|
|
@@ -52565,9 +52639,12 @@ const EntityInfoLabel = (props) => {
|
|
|
52565
52639
|
'&:hover .edit-icon': {
|
|
52566
52640
|
opacity: 1,
|
|
52567
52641
|
},
|
|
52568
|
-
}, children: [jsxRuntimeExports.jsxs(Box$2, { display: "flex", position: "relative", minHeight: '25px', children: [jsxRuntimeExports.jsx(Typography$2, { letterSpacing: -0.5, fontWeight: '600', alignSelf: 'center', flexGrow: isEditing ? 1 : 0, color: (theme) => theme.palette.text.primary, children: title }), isNotEditable ? null : isEditing ? (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(StyledSaveCancelButton$1, { size: "small", onClick: handleSave, children: isSaving ? jsxRuntimeExports.jsx(CircularProgress$2, { size: 24 }) : jsxRuntimeExports.jsx(default_1$a, {}) }), jsxRuntimeExports.jsx(StyledSaveCancelButton$1, { size: "small", onClick: handleCancel, children: jsxRuntimeExports.jsx(default_1$8, {}) })] })) : (jsxRuntimeExports.jsx(StyledIconButton$2, { className: "edit-icon", size: "small", onClick: handleEditClick, children: jsxRuntimeExports.jsx(default_1$f, {}) }))] }), jsxRuntimeExports.jsx(Box$2, { width: isEditing ? '100%' : '50%', position: "relative", children: isEditing && inputType === 'text' ? (jsxRuntimeExports.jsx(TextField$1, { value: textValue, onChange: handleInputChange, variant: "standard", size: "small", sx: { width: '100%' } })) : isEditing && (inputType === 'select' || inputType === 'selectMembers') ? (jsxRuntimeExports.jsxs(Select$2, { value: selectValue, onChange: handleSelectChange, variant: "standard", size: "small", sx: { width: '100%' }, children: [props.entityType === 'contact' ? (jsxRuntimeExports.jsx(MenuItem$2, { value: "", children: t('contactDetails.contactInfo.emptySelection') })) : null, options.map((option, index) => (jsxRuntimeExports.jsx(MenuItem$2, { value: option.id, children: props.entityType === 'contact'
|
|
52642
|
+
}, children: [jsxRuntimeExports.jsxs(Box$2, { display: "flex", position: "relative", minHeight: '25px', children: [jsxRuntimeExports.jsx(Typography$2, { letterSpacing: -0.5, fontWeight: '600', alignSelf: 'center', flexGrow: isEditing ? 1 : 0, color: (theme) => theme.palette.text.primary, children: title }), isNotEditable ? null : isEditing ? (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(StyledSaveCancelButton$1, { size: "small", onClick: handleSave, children: isSaving ? jsxRuntimeExports.jsx(CircularProgress$2, { size: 24 }) : jsxRuntimeExports.jsx(default_1$a, {}) }), jsxRuntimeExports.jsx(StyledSaveCancelButton$1, { size: "small", onClick: handleCancel, children: jsxRuntimeExports.jsx(default_1$8, {}) })] })) : (jsxRuntimeExports.jsx(StyledIconButton$2, { className: "edit-icon", size: "small", onClick: handleEditClick, children: jsxRuntimeExports.jsx(default_1$f, {}) }))] }), jsxRuntimeExports.jsx(Box$2, { width: isEditing ? '100%' : '50%', position: "relative", children: isEditing && inputType === 'text' ? (jsxRuntimeExports.jsx(TextField$1, { value: textValue, onChange: handleInputChange, variant: "standard", size: "small", sx: { width: '100%' } })) : isEditing && (inputType === 'select' || inputType === 'selectMembers') ? (jsxRuntimeExports.jsxs(Select$2, { value: selectValue, onChange: handleSelectChange, variant: "standard", size: "small", sx: { width: '100%' }, children: [props.entityType === 'contact' ? (jsxRuntimeExports.jsx(MenuItem$2, { value: "", children: t('conversations.contactDetails.contactInfo.emptySelection') })) : null, options.map((option, index) => (jsxRuntimeExports.jsx(MenuItem$2, { value: option.id, children: props.entityType === 'contact'
|
|
52569
52643
|
? option.name?.trim() || (isUserInfo(option) ? option.email : '') || 'Sin nombre'
|
|
52570
|
-
: option.name?.trim() || option.email || 'Sin nombre' }, index)))] })) : isEditing && isContactBirthdayProps(props) ? (jsxRuntimeExports.jsx(DateSelect, { birthDate: props.contact.field.birthDate, setBirthDate: props.contact.action.setBirthDate, dateFormat: props.dateFormat })) : !isEditing &&
|
|
52644
|
+
: option.name?.trim() || option.email || 'Sin nombre' }, index)))] })) : isEditing && isContactBirthdayProps(props) ? (jsxRuntimeExports.jsx(DateSelect, { birthDate: props.contact.field.birthDate, setBirthDate: props.contact.action.setBirthDate, dateFormat: props.dateFormat })) : !isEditing &&
|
|
52645
|
+
props.entityType === 'contact' &&
|
|
52646
|
+
inputType === 'selectBusiness' &&
|
|
52647
|
+
props.businessId ? (jsxRuntimeExports.jsx(Box$2, { display: "flex", alignItems: "center", children: "Popover" })) : (jsxRuntimeExports.jsx(Typography$2, { fontWeight: '400', sx: { padding: '2.5px 14px 8.5px 0px' }, color: (theme) => theme.palette.text.primary, children: displayValue || (typeof value === 'string' && value) || '-' })) })] }));
|
|
52571
52648
|
};
|
|
52572
52649
|
|
|
52573
52650
|
const ContactInfoLabel = (props) => {
|
|
@@ -54701,9 +54778,9 @@ const ContactGeneral = (props) => {
|
|
|
54701
54778
|
}
|
|
54702
54779
|
return age;
|
|
54703
54780
|
};
|
|
54704
|
-
return (jsxRuntimeExports.jsx(Section, { title: "General", children: jsxRuntimeExports.jsxs(SectionContent, { children: [jsxRuntimeExports.jsx(ContactInfoLabel, { title: t('contactDetails.contactOwner'), displayValue: owner || '-', value: entityData.owner, inputType: "select", options: users, constructUpdateObject: (value) => ({
|
|
54781
|
+
return (jsxRuntimeExports.jsx(Section, { title: "General", children: jsxRuntimeExports.jsxs(SectionContent, { children: [jsxRuntimeExports.jsx(ContactInfoLabel, { title: t('conversations.contactDetails.contactOwner'), displayValue: owner || '-', value: entityData.owner, inputType: "select", options: users, constructUpdateObject: (value) => ({
|
|
54705
54782
|
owner: typeof value === 'string' ? value : '',
|
|
54706
|
-
}), contact: editContact, baseUrl: baseUrl, spaceId: spaceId, contactId: entityData.id, onEntityUpdated: onEntityUpdated }), jsxRuntimeExports.jsx(ContactInfoLabel, { title: t('contactDetails.business'), displayValue: entityData.businessName || '-', value: entityData.businessId, inputType: "selectBusiness", businessId: entityData.businessId, contact: editContact, baseUrl: baseUrl, spaceId: spaceId, contactId: entityData.id, onEntityUpdated: onEntityUpdated }), jsxRuntimeExports.jsx(ContactInfoLabel, { title: t('contactDetails.createdBy'), value: createdBy || '-', isNotEditable: true, contact: editContact, baseUrl: baseUrl, spaceId: spaceId, contactId: entityData.id }), jsxRuntimeExports.jsx(ContactInfoLabel, { title: t('contactDetails.modifiedBy'), value: updatedBy || '-', isNotEditable: true, contact: editContact, baseUrl: baseUrl, spaceId: spaceId, contactId: entityData.id }), jsxRuntimeExports.jsx(ContactInfoLabel, { title: t('global.birthdate'), inputType: "birthday", displayValue: birthDate ? `${dateOnlyString} (${calculateAge(birthDate.toDate())})` : '-', value: birthDate ? birthDate.toISOString() : '', constructUpdateObject: (value) => ({
|
|
54783
|
+
}), contact: editContact, baseUrl: baseUrl, spaceId: spaceId, contactId: entityData.id, onEntityUpdated: onEntityUpdated }), jsxRuntimeExports.jsx(ContactInfoLabel, { title: t('conversations.contactDetails.business'), displayValue: entityData.businessName || '-', value: entityData.businessId, inputType: "selectBusiness", businessId: entityData.businessId, contact: editContact, baseUrl: baseUrl, spaceId: spaceId, contactId: entityData.id, onEntityUpdated: onEntityUpdated }), jsxRuntimeExports.jsx(ContactInfoLabel, { title: t('conversations.contactDetails.createdBy'), value: createdBy || '-', isNotEditable: true, contact: editContact, baseUrl: baseUrl, spaceId: spaceId, contactId: entityData.id }), jsxRuntimeExports.jsx(ContactInfoLabel, { title: t('conversations.contactDetails.modifiedBy'), value: updatedBy || '-', isNotEditable: true, contact: editContact, baseUrl: baseUrl, spaceId: spaceId, contactId: entityData.id }), jsxRuntimeExports.jsx(ContactInfoLabel, { title: t('global.birthdate'), inputType: "birthday", displayValue: birthDate ? `${dateOnlyString} (${calculateAge(birthDate.toDate())})` : '-', value: birthDate ? birthDate.toISOString() : '', constructUpdateObject: (value) => ({
|
|
54707
54784
|
birthDate: value,
|
|
54708
54785
|
}), contact: editContact, baseUrl: baseUrl, spaceId: spaceId, contactId: entityData.id, dateFormat: dateFormat, onEntityUpdated: onEntityUpdated }), editContact.field.customProperties.map((property) => (jsxRuntimeExports.jsx(EntityCustomFieldLabel, { property: property, entity: editContact, entityType: "contact", entityId: String(entityData.id), customContactFields: customContactFields, userTrii: currentUser, baseUrl: baseUrl, spaceId: spaceId, onEntityUpdated: onEntityUpdated }, property.nameKey)))] }) }));
|
|
54709
54786
|
};
|
|
@@ -54778,9 +54855,9 @@ const BusinessGeneral = (props) => {
|
|
|
54778
54855
|
controller.abort();
|
|
54779
54856
|
};
|
|
54780
54857
|
}, [api, entityData, users, currentUser]);
|
|
54781
|
-
return (jsxRuntimeExports.jsx(Section, { title: "General", children: jsxRuntimeExports.jsxs(SectionContent, { children: [jsxRuntimeExports.jsx(BusinessInfoLabel, { title: t('businessDetails.businessOwner'), value: entityData.owner, displayValue: owner || '-', inputType: "select", options: users, constructUpdateObject: (value) => ({
|
|
54858
|
+
return (jsxRuntimeExports.jsx(Section, { title: "General", children: jsxRuntimeExports.jsxs(SectionContent, { children: [jsxRuntimeExports.jsx(BusinessInfoLabel, { title: t('conversations.businessDetails.businessOwner'), value: entityData.owner, displayValue: owner || '-', inputType: "select", options: users, constructUpdateObject: (value) => ({
|
|
54782
54859
|
owner: typeof value === 'string' ? value : '',
|
|
54783
|
-
}), baseUrl: baseUrl, spaceId: spaceId, businessId: entityData.id, onEntityUpdated: onEntityUpdated }), jsxRuntimeExports.jsx(BusinessInfoLabel, { title: t('contactDetails.createdBy'), value: createdBy || '-', isNotEditable: true }), jsxRuntimeExports.jsx(BusinessInfoLabel, { title: t('contactDetails.modifiedBy'), value: updatedBy || '-', isNotEditable: true }), editBusiness.field.customProperties.map((property) => (jsxRuntimeExports.jsx(EntityCustomFieldLabel, { property: property, entity: editBusiness, entityType: "business", entityId: String(entityData.id), customContactFields: customContactFields, userTrii: currentUser, baseUrl: baseUrl, spaceId: spaceId, onEntityUpdated: onEntityUpdated }, property.nameKey)))] }) }));
|
|
54860
|
+
}), baseUrl: baseUrl, spaceId: spaceId, businessId: entityData.id, onEntityUpdated: onEntityUpdated }), jsxRuntimeExports.jsx(BusinessInfoLabel, { title: t('conversations.contactDetails.createdBy'), value: createdBy || '-', isNotEditable: true }), jsxRuntimeExports.jsx(BusinessInfoLabel, { title: t('conversations.contactDetails.modifiedBy'), value: updatedBy || '-', isNotEditable: true }), editBusiness.field.customProperties.map((property) => (jsxRuntimeExports.jsx(EntityCustomFieldLabel, { property: property, entity: editBusiness, entityType: "business", entityId: String(entityData.id), customContactFields: customContactFields, userTrii: currentUser, baseUrl: baseUrl, spaceId: spaceId, onEntityUpdated: onEntityUpdated }, property.nameKey)))] }) }));
|
|
54784
54861
|
};
|
|
54785
54862
|
|
|
54786
54863
|
const General = (props) => {
|
|
@@ -56939,7 +57016,7 @@ const ContactInformation = ({ ownerData }) => {
|
|
|
56939
57016
|
const contactMethods = [
|
|
56940
57017
|
{
|
|
56941
57018
|
key: 'phones',
|
|
56942
|
-
title: t('contactDetails.phones'),
|
|
57019
|
+
title: t('conversations.contactDetails.phones'),
|
|
56943
57020
|
items: phones,
|
|
56944
57021
|
isPhone: true,
|
|
56945
57022
|
modalTitle: 'Phones',
|
|
@@ -56995,7 +57072,7 @@ const ContactInformation = ({ ownerData }) => {
|
|
|
56995
57072
|
visible: true,
|
|
56996
57073
|
},
|
|
56997
57074
|
];
|
|
56998
|
-
return (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(Section, { title: t('contactDetails.contactInformation'), children: jsxRuntimeExports.jsx(SectionContent, { children: jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 gap-3", children: contactMethods
|
|
57075
|
+
return (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(Section, { title: t('conversations.contactDetails.contactInformation'), children: jsxRuntimeExports.jsx(SectionContent, { children: jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 gap-3", children: contactMethods
|
|
56999
57076
|
.filter((method) => method.visible)
|
|
57000
57077
|
.map((method) => (jsxRuntimeExports.jsx(ContactMethod, { handleEdit: () => openModal(method.modalTitle), title: method.title, methodItems: method.items, isPhone: method.isPhone, owner: ownerData }, method.key))) }) }) }), jsxRuntimeExports.jsx(EditModal, { open: isOpen, onClose: closeModal, title: title })] }));
|
|
57001
57078
|
};
|
|
@@ -57008,47 +57085,18 @@ const AddressInformation = ({ entityType, entityData, baseUrl, spaceId, onEntity
|
|
|
57008
57085
|
onEntityUpdated,
|
|
57009
57086
|
};
|
|
57010
57087
|
const t = useTranslationContext();
|
|
57011
|
-
|
|
57012
|
-
|
|
57013
|
-
|
|
57014
|
-
|
|
57015
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType:
|
|
57016
|
-
|
|
57017
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType:
|
|
57018
|
-
|
|
57019
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType:
|
|
57020
|
-
|
|
57021
|
-
})
|
|
57022
|
-
|
|
57023
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: "contact", title: t('contactDetails.postcode'), value: entityData.address1?.zipcode ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57024
|
-
address1: { zipcode: value },
|
|
57025
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: "contact", title: t('contactDetails.anotherPostcode'), value: entityData.address2?.zipcode ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57026
|
-
address2: { zipcode: value },
|
|
57027
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: "contact", title: t('contactDetails.country'), value: entityData.address1?.country ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57028
|
-
address1: { country: value },
|
|
57029
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: "contact", title: t('contactDetails.anotherCountry'), value: entityData.address2?.country ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57030
|
-
address2: { country: value },
|
|
57031
|
-
}) })] })) : (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: "business", title: t('contactDetails.street'), value: entityData.address1?.street ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57032
|
-
address1: { street: value },
|
|
57033
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: "business", title: t('contactDetails.anotherStreet'), value: entityData.address2?.street ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57034
|
-
address2: { street: value },
|
|
57035
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: "business", title: t('contactDetails.city'), value: entityData.address1?.city ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57036
|
-
address1: { city: value },
|
|
57037
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: "business", title: t('contactDetails.anotherCity'), value: entityData.address2?.city ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57038
|
-
address2: { city: value },
|
|
57039
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: "business", title: t('contactDetails.state'), value: entityData.address1?.state ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57040
|
-
address1: { state: value },
|
|
57041
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: "business", title: t('contactDetails.anotherState'), value: entityData.address2?.state ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57042
|
-
address2: { state: value },
|
|
57043
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: "business", title: t('contactDetails.postcode'), value: entityData.address1?.zipcode ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57044
|
-
address1: { zipcode: value },
|
|
57045
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: "business", title: t('contactDetails.anotherPostcode'), value: entityData.address2?.zipcode ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57046
|
-
address2: { zipcode: value },
|
|
57047
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: "business", title: t('contactDetails.country'), value: entityData.address1?.country ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57048
|
-
address1: { country: value },
|
|
57049
|
-
}) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: "business", title: t('contactDetails.anotherCountry'), value: entityData.address2?.country ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57050
|
-
address2: { country: value },
|
|
57051
|
-
}) })] })) }) }));
|
|
57088
|
+
const AddressGroup = ({ addressNumber, title, }) => (jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-4 rounded-xl border border-gray-100 bg-gray-50/50 p-4", children: [jsxRuntimeExports.jsx("h4", { className: "text-sm font-semibold text-gray-700", children: title }), jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-2 gap-x-4 gap-y-3", children: [jsxRuntimeExports.jsx("div", { className: "col-span-2", children: jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: entityType, title: t('conversations.contactDetails.street'), value: entityData[addressNumber]?.street ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57089
|
+
[addressNumber]: { street: value },
|
|
57090
|
+
}), minWidth: "100%" }) }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: entityType, title: t('conversations.contactDetails.city'), value: entityData[addressNumber]?.city ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57091
|
+
[addressNumber]: { city: value },
|
|
57092
|
+
}), minWidth: "100%" }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: entityType, title: t('conversations.contactDetails.state'), value: entityData[addressNumber]?.state ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57093
|
+
[addressNumber]: { state: value },
|
|
57094
|
+
}), minWidth: "100%" }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: entityType, title: t('conversations.contactDetails.postcode'), value: entityData[addressNumber]?.zipcode ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57095
|
+
[addressNumber]: { zipcode: value },
|
|
57096
|
+
}), minWidth: "100%" }), jsxRuntimeExports.jsx(EntityInfoLabel, { entityType: entityType, title: t('conversations.contactDetails.country'), value: entityData[addressNumber]?.country ?? '', ...commonProps, constructUpdateObject: (value) => ({
|
|
57097
|
+
[addressNumber]: { country: value },
|
|
57098
|
+
}), minWidth: "100%" })] })] }));
|
|
57099
|
+
return (jsxRuntimeExports.jsx(Section, { title: t('conversations.contactDetails.addressInformation'), children: jsxRuntimeExports.jsx(SectionContent, { children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-4", children: [jsxRuntimeExports.jsx(AddressGroup, { addressNumber: "address1", title: t('conversations.contactDetails.primaryAddress') || 'Primary Address' }), jsxRuntimeExports.jsx(AddressGroup, { addressNumber: "address2", title: t('conversations.contactDetails.secondaryAddress') || 'Secondary Address' })] }) }) }));
|
|
57052
57100
|
};
|
|
57053
57101
|
|
|
57054
57102
|
const useEntityUpdateSync = ({ entity, setEntity }) => {
|
|
@@ -57162,7 +57210,6 @@ const EditContactModal = ({ open, onClose, baseUrl, spaceId, contactId, sx, t })
|
|
|
57162
57210
|
return null;
|
|
57163
57211
|
return createEditContactApi(baseUrl, spaceId);
|
|
57164
57212
|
}, [baseUrl, spaceId]);
|
|
57165
|
-
console.log('[EditContactModal] t fn:', t?.name || 'anonymous', t);
|
|
57166
57213
|
const { state, selectors, actions } = useEditContactModalController({
|
|
57167
57214
|
open,
|
|
57168
57215
|
baseUrl,
|
|
@@ -57220,7 +57267,7 @@ const EditContactModal = ({ open, onClose, baseUrl, spaceId, contactId, sx, t })
|
|
|
57220
57267
|
minHeight: 220,
|
|
57221
57268
|
}, children: jsxRuntimeExports.jsx(CircularProgress$2, {}) })) : state.error ? (jsxRuntimeExports.jsx(Box$2, { sx: { mb: 2 }, children: "Failed to load contact" })) : state.contactData ? (jsxRuntimeExports.jsx(EditEntityProvider, { entityType: selectors.contactType === 'business' ? 'business' : 'contact', entityData: state.contactData, customContactFields: selectors.contactFields, baseUrl: baseUrl, spaceId: spaceId, children: jsxRuntimeExports.jsxs(Box$2, { sx: { position: 'relative', height: '100%' }, children: [jsxRuntimeExports.jsx(Fade$2, { in: view === 'main', timeout: 200, mountOnEnter: true, unmountOnExit: true, children: jsxRuntimeExports.jsxs(Box$2, { sx: { pt: 0.5, position: 'absolute', inset: 0, overflowY: 'auto' }, children: [jsxRuntimeExports.jsx(Header, { imgUrl: image.imageUrl, displayName: selectors.displayName, tags: selectors.tags, onEditTags: () => {
|
|
57222
57269
|
setView('tags');
|
|
57223
|
-
}, onUploadPhoto: image.action.uploadImage, onPhotoFileChange: image.inputAtributes.onChange, photoInputRef: image.inputAtributes.ref, isUploadingPhoto: image.isUploading, onDeletePhoto: image.action.deleteImage, isDeletingPhoto: image.isDeleting }), jsxRuntimeExports.jsxs(Box$2, { sx: { px: 1, pb: 2 }, children: [jsxRuntimeExports.jsx(General, { dateFormat: selectors.userTrii?.regCon_dateFormat || 'MM/dd/yyyy', entityType: selectors.contactType === 'contact' ||
|
|
57270
|
+
}, onUploadPhoto: image.action.uploadImage, onPhotoFileChange: image.inputAtributes.onChange, photoInputRef: image.inputAtributes.ref, isUploadingPhoto: image.isUploading, onDeletePhoto: image.action.deleteImage, isDeletingPhoto: image.isDeleting, contactType: selectors.contactType, entityId: state.contactData?.id, firstName: selectors.isContact ? state.contactData.firstName : undefined, lastName: selectors.isContact ? state.contactData.lastName : undefined, name: selectors.isBusiness ? state.contactData.name : undefined, onEntityUpdated: handleEntityUpdated }), jsxRuntimeExports.jsxs(Box$2, { sx: { px: 1, pb: 2 }, children: [jsxRuntimeExports.jsx(General, { dateFormat: selectors.userTrii?.regCon_dateFormat || 'MM/dd/yyyy', entityType: selectors.contactType === 'contact' ||
|
|
57224
57271
|
selectors.contactType === 'business'
|
|
57225
57272
|
? selectors.contactType
|
|
57226
57273
|
: 'contact', entityData: state.contactData, customContactFields: selectors.contactFields, baseUrl: baseUrl, spaceId: spaceId, onEntityUpdated: handleEntityUpdated, currentUser: selectors.userTrii }), jsxRuntimeExports.jsx(AddressInformation, { entityType: selectors.contactType === 'contact' ||
|