brd-ui-kit 0.1.84 → 0.1.86
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/components/approval-log/approval-log.d.ts +1 -1
- package/dist/components/approval-log/index.d.ts +1 -1
- package/dist/components/card-info/card-info.d.ts +3 -2
- package/dist/components/forms/form-Input-phone.d.ts +10 -0
- package/dist/components/forms/form-avatar-uploader.d.ts +9 -0
- package/dist/components/forms/form-contact-input.d.ts +9 -0
- package/dist/components/forms/form-files-uploader.d.ts +9 -0
- package/dist/components/forms/form-input-password.d.ts +9 -0
- package/dist/components/forms/form-input.d.ts +9 -0
- package/dist/components/forms/form-select-calendar.d.ts +9 -0
- package/dist/components/forms/form-select.d.ts +18 -0
- package/dist/components/forms/form-textarea.d.ts +9 -0
- package/dist/components/forms/form-toggle-group.d.ts +13 -0
- package/dist/components/forms/form.d.ts +12 -0
- package/dist/components/forms/from-checkbox.d.ts +8 -0
- package/dist/components/forms/index.d.ts +12 -0
- package/dist/components/forms.d.ts +2 -0
- package/dist/components/input-contact/input-contact.d.ts +1 -0
- package/dist/components/story-drawer/index.d.ts +1 -1
- package/dist/components/story-drawer/story-drawer.d.ts +2 -2
- package/dist/components-approval-log-approval-log.cjs.map +1 -1
- package/dist/components-approval-log-approval-log.js.map +1 -1
- package/dist/components-card-info-card-info.cjs +1 -1
- package/dist/components-card-info-card-info.cjs.map +1 -1
- package/dist/components-card-info-card-info.js +15 -14
- package/dist/components-card-info-card-info.js.map +1 -1
- package/dist/components-forms-form-Input-phone.cjs +2 -0
- package/dist/components-forms-form-Input-phone.cjs.map +1 -0
- package/dist/components-forms-form-Input-phone.js +63 -0
- package/dist/components-forms-form-Input-phone.js.map +1 -0
- package/dist/components-forms-form-avatar-uploader.cjs +2 -0
- package/dist/components-forms-form-avatar-uploader.cjs.map +1 -0
- package/dist/components-forms-form-avatar-uploader.js +26 -0
- package/dist/components-forms-form-avatar-uploader.js.map +1 -0
- package/dist/components-forms-form-contact-input.cjs +2 -0
- package/dist/components-forms-form-contact-input.cjs.map +1 -0
- package/dist/components-forms-form-contact-input.js +66 -0
- package/dist/components-forms-form-contact-input.js.map +1 -0
- package/dist/components-forms-form-files-uploader.cjs +13 -0
- package/dist/components-forms-form-files-uploader.cjs.map +1 -0
- package/dist/components-forms-form-files-uploader.js +3060 -0
- package/dist/components-forms-form-files-uploader.js.map +1 -0
- package/dist/components-forms-form-input-password.cjs +30 -0
- package/dist/components-forms-form-input-password.cjs.map +1 -0
- package/dist/components-forms-form-input-password.js +377 -0
- package/dist/components-forms-form-input-password.js.map +1 -0
- package/dist/components-forms-form-input.cjs +2 -0
- package/dist/components-forms-form-input.cjs.map +1 -0
- package/dist/components-forms-form-input.js +46 -0
- package/dist/components-forms-form-input.js.map +1 -0
- package/dist/components-forms-form-select-calendar.cjs +2 -0
- package/dist/components-forms-form-select-calendar.cjs.map +1 -0
- package/dist/components-forms-form-select-calendar.js +28 -0
- package/dist/components-forms-form-select-calendar.js.map +1 -0
- package/dist/components-forms-form-select.cjs +2 -0
- package/dist/components-forms-form-select.cjs.map +1 -0
- package/dist/components-forms-form-select.js +83 -0
- package/dist/components-forms-form-select.js.map +1 -0
- package/dist/components-forms-form-textarea.cjs +2 -0
- package/dist/components-forms-form-textarea.cjs.map +1 -0
- package/dist/components-forms-form-textarea.js +42 -0
- package/dist/components-forms-form-textarea.js.map +1 -0
- package/dist/components-forms-form-toggle-group.cjs +2 -0
- package/dist/components-forms-form-toggle-group.cjs.map +1 -0
- package/dist/components-forms-form-toggle-group.js +27 -0
- package/dist/components-forms-form-toggle-group.js.map +1 -0
- package/dist/components-forms-form.cjs +2 -0
- package/dist/components-forms-form.cjs.map +1 -0
- package/dist/components-forms-form.js +24 -0
- package/dist/components-forms-form.js.map +1 -0
- package/dist/components-forms-from-checkbox.cjs +2 -0
- package/dist/components-forms-from-checkbox.cjs.map +1 -0
- package/dist/components-forms-from-checkbox.js +43 -0
- package/dist/components-forms-from-checkbox.js.map +1 -0
- package/dist/components-forms.cjs +2 -0
- package/dist/components-forms.cjs.map +1 -0
- package/dist/components-forms.js +27 -0
- package/dist/components-forms.js.map +1 -0
- package/dist/components-input-contact-input-contact.cjs.map +1 -1
- package/dist/components-input-contact-input-contact.js.map +1 -1
- package/dist/components-story-drawer-story-drawer.cjs.map +1 -1
- package/dist/components-story-drawer-story-drawer.js.map +1 -1
- package/dist/components-ui-typography-typography.styles-C6G6MFUq.js +105 -0
- package/dist/components-ui-typography-typography.styles-C6G6MFUq.js.map +1 -0
- package/dist/components-ui-typography-typography.styles-CMzY_pXl.cjs +2 -0
- package/dist/components-ui-typography-typography.styles-CMzY_pXl.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +27 -25
- package/dist/index.esm-CFsbc_Iq.js +1328 -0
- package/dist/index.esm-CFsbc_Iq.js.map +1 -0
- package/dist/index.esm-ZdO9UZ3G.cjs +2 -0
- package/dist/index.esm-ZdO9UZ3G.cjs.map +1 -0
- package/dist/index.js +102 -76
- package/dist/index.js.map +1 -1
- package/dist/types/error.d.ts +13 -0
- package/dist/types-error.cjs +2 -0
- package/dist/types-error.cjs.map +1 -0
- package/dist/types-error.js +2 -0
- package/dist/types-error.js.map +1 -0
- package/dist/utils/get-validation-state.d.ts +1 -0
- package/dist/utils-get-validation-state.cjs +2 -0
- package/dist/utils-get-validation-state.cjs.map +1 -0
- package/dist/utils-get-validation-state.js +14 -0
- package/dist/utils-get-validation-state.js.map +1 -0
- package/package.json +12 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
export { ApprovalLog } from './approval-log';
|
|
1
|
+
export { ApprovalLog, type ApprovalLogItem } from './approval-log';
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { VariantProps } from 'class-variance-authority';
|
|
2
2
|
import { cardInfoHeaderVariants } from './card-info.styles';
|
|
3
3
|
export interface CardInfoProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title" | "className">, VariantProps<typeof cardInfoHeaderVariants> {
|
|
4
|
-
title:
|
|
4
|
+
title: string;
|
|
5
|
+
headerComponent?: React.ReactNode;
|
|
5
6
|
children: React.ReactNode;
|
|
6
7
|
className?: {
|
|
7
8
|
borderLeft?: string;
|
|
@@ -10,4 +11,4 @@ export interface CardInfoProps extends Omit<React.HTMLAttributes<HTMLDivElement>
|
|
|
10
11
|
content?: string;
|
|
11
12
|
};
|
|
12
13
|
}
|
|
13
|
-
export declare const CardInfo: ({ className, title, children, accent, size, ...props }: CardInfoProps) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare const CardInfo: ({ className, title, headerComponent, children, accent, size, ...props }: CardInfoProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RegisterOptions } from 'react-hook-form';
|
|
2
|
+
import { InputProps } from '../input-field';
|
|
3
|
+
type Props = Omit<InputProps, "value" | "onChange" | "ref"> & {
|
|
4
|
+
name: string;
|
|
5
|
+
rules?: RegisterOptions;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
mask?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const FormInputPhone: ({ name, rules, mask, placeholder, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { RegisterOptions } from 'react-hook-form';
|
|
2
|
+
import { AvatarUploadProps } from '../avatar-uploader';
|
|
3
|
+
type Props = Omit<AvatarUploadProps, "onChange" | "src"> & {
|
|
4
|
+
name: string;
|
|
5
|
+
rules?: RegisterOptions;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare const FormAvatar: ({ name, rules, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { RegisterOptions } from 'react-hook-form';
|
|
2
|
+
import { InputProps } from '../input-field';
|
|
3
|
+
type Props = Omit<InputProps, "value" | "onChange" | "ref"> & {
|
|
4
|
+
name: string;
|
|
5
|
+
rules?: RegisterOptions;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare const FormContactInput: ({ name, rules, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PropsFilesUploader } from 'brd-ui-kit/files-uploader';
|
|
2
|
+
import { RegisterOptions } from 'react-hook-form';
|
|
3
|
+
type Props = Omit<PropsFilesUploader, "value" | "onChange" | "disabled" | "isErrorText"> & {
|
|
4
|
+
name: string;
|
|
5
|
+
rules?: RegisterOptions;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare const FormFilesUploader: ({ name, rules, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { InputPasswordProps } from 'brd-ui-kit';
|
|
2
|
+
import { ControllerRenderProps, RegisterOptions } from 'react-hook-form';
|
|
3
|
+
type Props = Omit<InputPasswordProps, keyof ControllerRenderProps> & {
|
|
4
|
+
name: string;
|
|
5
|
+
rules?: RegisterOptions;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare const FormInputPassword: ({ name, rules, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ControllerRenderProps, RegisterOptions } from 'react-hook-form';
|
|
2
|
+
import { InputProps } from '../input-field';
|
|
3
|
+
type Props = Omit<InputProps, keyof ControllerRenderProps> & {
|
|
4
|
+
name: string;
|
|
5
|
+
rules?: RegisterOptions;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare const FormInput: ({ name, rules, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { RegisterOptions } from 'react-hook-form';
|
|
2
|
+
import { SelectCalendarMenuProps } from '../ui/select-calendar-menu';
|
|
3
|
+
type Props = {
|
|
4
|
+
name: string;
|
|
5
|
+
rules?: RegisterOptions;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
} & SelectCalendarMenuProps;
|
|
8
|
+
export declare const FormSelectCalendar: ({ name, rules, disabled, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ControllerRenderProps, RegisterOptions } from 'react-hook-form';
|
|
2
|
+
import { SelectProps } from '../select-field';
|
|
3
|
+
import { SelectGroupsProps } from '../select-groups';
|
|
4
|
+
type BaseProps = {
|
|
5
|
+
name: string;
|
|
6
|
+
rules?: RegisterOptions;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
selectField?: "field" | "groups";
|
|
9
|
+
};
|
|
10
|
+
type FieldProps = BaseProps & {
|
|
11
|
+
selectField?: "field";
|
|
12
|
+
} & Omit<SelectProps, keyof ControllerRenderProps>;
|
|
13
|
+
type GroupsProps = BaseProps & {
|
|
14
|
+
selectField?: "groups";
|
|
15
|
+
} & SelectGroupsProps;
|
|
16
|
+
type Props = FieldProps | GroupsProps;
|
|
17
|
+
export declare const FormSelect: ({ name, rules, disabled, selectField, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ControllerRenderProps, RegisterOptions } from 'react-hook-form';
|
|
2
|
+
import { TextareaFieldProps } from '../textarea-field';
|
|
3
|
+
type Props = Omit<TextareaFieldProps, keyof ControllerRenderProps> & {
|
|
4
|
+
name: string;
|
|
5
|
+
rules?: RegisterOptions;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare const FormTextarea: ({ name, rules, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { RegisterOptions } from 'react-hook-form';
|
|
2
|
+
import { ToggleGroup } from '../ui/toggle-group';
|
|
3
|
+
type ToggleGroupProps = React.ComponentProps<typeof ToggleGroup>;
|
|
4
|
+
type BaseProps = {
|
|
5
|
+
name: string;
|
|
6
|
+
rules?: RegisterOptions;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
kind?: string;
|
|
9
|
+
type?: "single" | "multiple";
|
|
10
|
+
};
|
|
11
|
+
type Props = BaseProps & ToggleGroupProps;
|
|
12
|
+
export declare const FormToggleGroup: ({ name, rules, kind, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ApiValidationError } from '../../types/error';
|
|
2
|
+
import { ComponentPropsWithRef, PropsWithChildren } from 'react';
|
|
3
|
+
import { DefaultValues, FieldValues, UseFormReturn } from 'react-hook-form';
|
|
4
|
+
type FormProps<T extends FieldValues> = {
|
|
5
|
+
apiErrors?: ApiValidationError[];
|
|
6
|
+
onSubmit: (values: T) => void | Promise<void>;
|
|
7
|
+
defaultValues?: DefaultValues<T>;
|
|
8
|
+
formControls?: UseFormReturn<T>;
|
|
9
|
+
};
|
|
10
|
+
type Props<T extends FieldValues> = Omit<ComponentPropsWithRef<"form">, keyof FormProps<T>> & PropsWithChildren<FormProps<T>>;
|
|
11
|
+
declare const Form: <T extends FieldValues>(props: Props<T>) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export { Form };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ControllerRenderProps, RegisterOptions } from 'react-hook-form';
|
|
2
|
+
import { CheckboxProps } from '../basic-checkbox';
|
|
3
|
+
type Props = Omit<CheckboxProps, keyof ControllerRenderProps> & {
|
|
4
|
+
name: string;
|
|
5
|
+
rules?: RegisterOptions;
|
|
6
|
+
};
|
|
7
|
+
export declare const FormCheckbox: ({ name, rules, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { Form } from './form';
|
|
2
|
+
export { FormAvatar } from './form-avatar-uploader';
|
|
3
|
+
export { FormContactInput } from './form-contact-input';
|
|
4
|
+
export { FormFilesUploader } from './form-files-uploader';
|
|
5
|
+
export { FormInput } from './form-input';
|
|
6
|
+
export { FormInputPassword } from './form-input-password';
|
|
7
|
+
export { FormInputPhone } from './form-Input-phone';
|
|
8
|
+
export { FormSelect } from './form-select';
|
|
9
|
+
export { FormSelectCalendar } from './form-select-calendar';
|
|
10
|
+
export { FormTextarea } from './form-textarea';
|
|
11
|
+
export { FormToggleGroup } from './form-toggle-group';
|
|
12
|
+
export { FormCheckbox } from './from-checkbox';
|
|
@@ -19,6 +19,7 @@ type Props = {
|
|
|
19
19
|
onTypeChange?: (type: TypesChange) => void;
|
|
20
20
|
inputProps: React.ComponentPropsWithRef<"input">;
|
|
21
21
|
inputPhoneProps: InputPhoneProps;
|
|
22
|
+
disabled?: boolean;
|
|
22
23
|
};
|
|
23
24
|
export declare const InputContact: (props: Props) => import("react/jsx-runtime").JSX.Element;
|
|
24
25
|
export type { Props as InputContactProps, TypesChange };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { StoryDrawer } from './story-drawer';
|
|
1
|
+
export { StoryDrawer, type StoryData } from './story-drawer';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BadgeProps } from '../../index';
|
|
2
|
-
type
|
|
2
|
+
export type StoryData = {
|
|
3
3
|
id: string;
|
|
4
4
|
userName: string;
|
|
5
5
|
date: string;
|
|
@@ -11,7 +11,7 @@ type Data = {
|
|
|
11
11
|
isDateDivider?: false;
|
|
12
12
|
};
|
|
13
13
|
type Props = {
|
|
14
|
-
data:
|
|
14
|
+
data: StoryData[];
|
|
15
15
|
open: boolean;
|
|
16
16
|
closePopup: (open: boolean) => void;
|
|
17
17
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components-approval-log-approval-log.cjs","sources":["../src/assets/images/not-found-approval-log.png","../src/components/approval-log/approval-log.tsx"],"sourcesContent":["export default \"data:image/png;base64,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\"","import notFoundImg from \"@/assets/images/not-found-approval-log.png\";\nimport {\n BasicAvatar,\n Button,\n cn,\n ConfigurableDropdownMenu,\n Icon,\n TextareaField,\n Typography,\n type DropdownMenuConfigItem,\n type DropdownMenuConfigNode,\n} from \"@/index\";\nimport { useCallback, useMemo, useRef, useState, type ChangeEvent } from \"react\";\n\ntype ApprovalLogItem = {\n id?: string;\n userName: string;\n dateShort?: string;\n message: string;\n imageUrl?: string;\n tags: string[];\n rowState?: string;\n};\n\nconst BADGES = [\"edit\", \"sum\", \"term\", \"materials\"];\n\nconst NOTE_ACTIONS: DropdownMenuConfigNode[] = [\n { id: \"select\", label: \"Выбрать\", iconType: \"check-circle\" },\n { id: \"edit\", label: \"Редактировать\", iconType: \"pencil-simple\" },\n { id: \"delete\", label: \"Удалить\", iconType: \"trash\" },\n];\n\nconst getBadge = (type: string) => {\n switch (type) {\n case \"edit\":\n return {\n bg: \"bg-info-new-bg\",\n color: \"text-info-new-text\",\n };\n\n case \"materials\":\n return {\n bg: \"bg-contract-bg\",\n color: \"text-contract-text\",\n };\n\n case \"sum\":\n return {\n bg: \"bg-follow-up-bg\",\n color: \"text-follow-up-text\",\n };\n\n case \"term\":\n return {\n bg: \"bg-warning-bg\",\n color: \"text-warning-text\",\n };\n\n default:\n return { bg: \"\", color: \"\" };\n }\n};\n\nconst getNotesWord = (count: number) => {\n const mod10 = count % 10;\n const mod100 = count % 100;\n\n if (mod10 === 1 && mod100 !== 11) {\n return \"заметку\";\n }\n\n if (mod10 >= 2 && mod10 <= 4 && (mod100 < 12 || mod100 > 14)) {\n return \"заметки\";\n }\n\n return \"заметок\";\n};\n\ntype Props = {\n logs: ApprovalLogItem[];\n onDelete?: (ids: string[]) => void;\n onCreate?: (item: ApprovalLogItem) => void;\n onEdit?: (item: ApprovalLogItem) => void;\n className?: string;\n};\n\n// TODO: добавить виртуализацию\nexport const ApprovalLog = ({ logs, className, onDelete, onCreate, onEdit }: Props) => {\n const [message, setMessage] = useState(\"\");\n const [imageUrl, setImageUrl] = useState<string | null>(null);\n const [editMessage, setEditMessage] = useState(\"\");\n const [editingId, setEditingId] = useState<string | null>(null);\n const [selectedLogs, setSelectedLogs] = useState<string[]>([]);\n const [selectedBadges, setSelectedBadges] = useState<string[]>([]);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n\n const logsById = useMemo(() => new Map(logs.map((item) => [item.id, item])), [logs]);\n const selectedLogsSet = useMemo(() => new Set(selectedLogs), [selectedLogs]);\n const selectedBadgesSet = useMemo(() => new Set(selectedBadges), [selectedBadges]);\n\n const selectLog = useCallback((id: string) => {\n setSelectedLogs((currentLogs) => {\n if (currentLogs.includes(id)) {\n return currentLogs;\n }\n\n return [...currentLogs, id];\n });\n }, []);\n\n const removeSelectedLog = useCallback((id: string) => {\n setSelectedLogs((currentLogs) => currentLogs.filter((item) => item !== id));\n }, []);\n\n const clearSelectedLogs = useCallback(() => {\n setSelectedLogs([]);\n }, []);\n\n const toggleBadge = useCallback((tag: string) => {\n setSelectedBadges((currentBadges) => {\n if (currentBadges.includes(tag)) {\n return currentBadges.filter((item) => item !== tag);\n }\n\n return [...currentBadges, tag];\n });\n }, []);\n\n const clearSelectedBadges = useCallback(() => {\n setSelectedBadges([]);\n }, []);\n\n const createOnAction = useCallback(\n (id: string) => {\n return (action: DropdownMenuConfigItem) => {\n switch (action.id) {\n case \"select\":\n selectLog(id);\n setEditingId(null);\n break;\n case \"edit\": {\n const target = logsById.get(id);\n if (!target) {\n return;\n }\n setEditingId(id);\n setMessage(target.message);\n setImageUrl(target.imageUrl ?? null);\n setSelectedBadges(target.tags);\n setEditMessage(target.message);\n clearSelectedLogs();\n break;\n }\n\n case \"delete\": {\n onDelete?.([id]);\n removeSelectedLog(id);\n break;\n }\n\n default:\n break;\n }\n };\n },\n [\n logsById,\n clearSelectedLogs,\n onDelete,\n removeSelectedLog,\n selectLog,\n setSelectedBadges,\n ],\n );\n\n const handleOnChangeMessage = useCallback((e: ChangeEvent<HTMLTextAreaElement>) => {\n const value = e.target.value;\n setMessage(value);\n }, []);\n\n const onClear = useCallback(() => {\n setImageUrl(null);\n clearSelectedLogs();\n clearSelectedBadges();\n setMessage(\"\");\n setEditMessage(\"\");\n setEditingId(null);\n }, [clearSelectedBadges, clearSelectedLogs]);\n\n const handleDelete = useCallback(() => {\n onDelete?.(selectedLogs);\n onClear();\n }, [onDelete, onClear, selectedLogs]);\n\n // TODO: поправить при связи с бэком\n const handleCreate = (trimmedMessage: string) => {\n const createdItem: ApprovalLogItem = {\n userName: \"ОГ\",\n message: trimmedMessage,\n imageUrl: imageUrl ?? undefined,\n tags: selectedBadges.length > 0 ? selectedBadges : [],\n rowState: \"default\",\n };\n\n onCreate?.(createdItem);\n onClear();\n };\n\n const handleEdit = (trimmedMessage: string) => {\n if (!editingId) {\n return;\n }\n\n const target = logsById.get(editingId);\n if (!target) {\n return;\n }\n\n const updatedItem: ApprovalLogItem = {\n ...target,\n message: trimmedMessage,\n imageUrl: imageUrl ?? undefined,\n tags: selectedBadges.length > 0 ? selectedBadges : target.tags,\n };\n\n onEdit?.(updatedItem);\n onClear();\n };\n\n const handleOpenFilePicker = () => {\n fileInputRef.current?.click();\n };\n\n const handleFileChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file?.type.startsWith(\"image/\")) {\n return;\n }\n\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result;\n if (typeof result === \"string\") {\n setImageUrl(result);\n }\n };\n reader.readAsDataURL(file);\n\n e.target.value = \"\";\n }, []);\n\n const handleRemoveImage = useCallback(() => {\n setImageUrl(null);\n }, []);\n\n const handleSubmitMessage = () => {\n const trimmed = message.trim();\n if (!trimmed && !imageUrl) {\n return;\n }\n\n if (editingId) {\n handleEdit(trimmed);\n return;\n }\n\n handleCreate(trimmed);\n };\n\n return (\n <div\n className={cn(\"bg-primary-bg flex h-full w-full flex-col rounded-xl\", className)}\n >\n <div className=\"border-delicate-border border-b px-18 py-2.5\">\n <Typography\n variant=\"body-lg-medium\"\n className=\"text-primary-text\"\n >\n Журнал согласования\n </Typography>\n </div>\n\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n {logs.length > 0 ? (\n logs.map((item) => {\n return (\n <ConfigurableDropdownMenu\n key={item.id}\n items={NOTE_ACTIONS}\n onAction={createOnAction(item.id as string)}\n contentProps={{\n align: \"end\",\n side: \"bottom\",\n sideOffset: -72,\n }}\n trigger={\n <div\n className={cn(\n `flex cursor-pointer flex-col gap-2.5 px-4 py-3\n shadow-[0_-2px_4px_0_rgba(0,0,0,0.05)]`,\n selectedLogsSet.has(item.id as string) && \"bg-negotiation-bg\",\n editingId === item.id && \"bg-[rgba(137,204,22,0.1)]\",\n )}\n >\n <div className=\"flex gap-3\">\n <div className=\"w-fit\">\n <BasicAvatar\n initials={{\n text: item.userName,\n className: \"text-primary-text\",\n }}\n avatar={{\n className: \"h-12 w-12\",\n }}\n showDeleteOnHover={false}\n />\n\n <Typography\n variant=\"body-xxs-medium\"\n className=\"text-secondary-text text-center\"\n >\n {item.dateShort}\n </Typography>\n </div>\n\n <div className=\"flex w-full flex-col gap-2.5\">\n <div className=\"flex w-full items-center justify-between\">\n <Typography\n variant=\"body-md-medium\"\n className=\"text-primary-text\"\n >\n {item.userName}\n </Typography>\n\n <Icon\n type=\"check-circle\"\n className=\"text-sub-label-text\"\n />\n </div>\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-primary-text\"\n >\n {item.message}\n </Typography>\n {item.imageUrl && (\n <img\n src={item.imageUrl}\n alt=\"Вложенное изображение\"\n className=\"max-h-65 w-full rounded-lg object-contain\"\n />\n )}\n </div>\n </div>\n <div className=\"flex gap-3 px-4\">\n {item.tags.map((tag) => {\n const badge = getBadge(tag);\n return (\n <div\n key={tag}\n className={cn(\n \"flex items-center gap-1.25 rounded-lg border px-3 py-1\",\n badge.bg,\n badge.color,\n )}\n >\n <Typography variant=\"body-xxs-medium\">{tag}</Typography>\n\n <Icon\n type=\"check-circle\"\n size={15}\n strokeWidth={1.25}\n />\n </div>\n );\n })}\n </div>\n </div>\n }\n />\n );\n })\n ) : (\n <div\n className=\"flex h-full flex-col items-center justify-center gap-4 px-4\n text-center\"\n >\n <img\n src={notFoundImg}\n alt=\"not-found\"\n />\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-secondary-text\"\n >\n Место для важных заметок по продвижению заявки. Любые комментарии, скриншоты\n и все, что может помочь Вам освободить голову.\n </Typography>\n </div>\n )}\n </div>\n\n <div className=\"mt-auto shrink-0\">\n {selectedLogs.length > 0 ? (\n <div\n className=\"bg-secondary-bg border-delicate-border flex items-center\n justify-between rounded-b-xl border-t px-2 py-3\"\n >\n <Button\n variant=\"circleGhost\"\n onClick={onClear}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-secondary-text\"\n size={25}\n strokeWidth={1.5}\n />\n </Button>\n\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-secondary-text\"\n >\n Удалить {selectedLogs.length} {getNotesWord(selectedLogs.length)}...\n </Typography>\n\n <Button\n variant=\"circleGhost\"\n onClick={handleDelete}\n >\n <Icon\n type=\"trash\"\n className=\"text-error-text\"\n size={25}\n strokeWidth={1.5}\n />\n </Button>\n </div>\n ) : (\n <div>\n <div className=\"border-delicate-border flex justify-center gap-1 border-t p-2\">\n {BADGES.map((tag) => {\n const badge = getBadge(tag);\n return (\n <div\n key={tag}\n onClick={() => toggleBadge(tag)}\n className={cn(\n `flex w-full cursor-pointer items-center gap-1.25 rounded-lg border\n px-3 py-1`,\n badge.bg,\n badge.color,\n selectedBadgesSet.has(tag)\n ? \"border-current\"\n : \"border-transparent\",\n )}\n >\n <Typography\n variant=\"body-xxs-medium\"\n className=\"w-full text-center\"\n >\n {tag}\n </Typography>\n </div>\n );\n })}\n </div>\n\n <div\n className=\"border-delicate-border bg-secondary-bg rounded-b-xl border-t px-2\n py-3\"\n >\n {editingId && (\n <div className=\"flex justify-between\">\n <Button variant=\"circleGhost\">\n <Icon\n type=\"pencil\"\n className=\"text-secondary-text\"\n size={20}\n strokeWidth={1.5}\n />\n </Button>\n <div className=\"border-inp-default-border w-full border-l-2 pl-3\">\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-sub-label-text line-clamp-2\"\n >\n {editMessage}\n </Typography>\n </div>\n\n <Button\n variant=\"circleGhost\"\n onClick={onClear}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-secondary-text\"\n size={25}\n strokeWidth={1.5}\n />\n </Button>\n </div>\n )}\n\n <div className=\"flex items-center\">\n <input\n type=\"file\"\n accept=\"image/*\"\n ref={fileInputRef}\n className=\"hidden\"\n onChange={handleFileChange}\n />\n <Button\n variant=\"circleGhost\"\n onClick={handleOpenFilePicker}\n >\n <Icon\n type=\"plus\"\n className=\"text-secondary-text\"\n />\n </Button>\n <TextareaField\n rows={message.length < 20 ? 1 : 2}\n placeholder={\n editingId ? \"Редактирование заметки...\" : \"Напишите заметку...\"\n }\n value={message}\n onChange={handleOnChangeMessage}\n className=\"border-0! text-left placeholder:text-center\"\n />\n <Button\n variant=\"circleGhost\"\n onClick={handleSubmitMessage}\n >\n <Icon\n type=\"telegram-logo\"\n className=\"text-secondary-text\"\n />\n </Button>\n </div>\n {imageUrl && (\n <div className=\"bg-secondary-bg mt-2.5 flex items-start gap-2\">\n <img\n src={imageUrl}\n alt=\"Предпросмотр изображения\"\n className=\"max-h-50 w-full max-w-80 rounded-lg object-contain\"\n />\n <Button\n variant=\"circleGhost\"\n onClick={handleRemoveImage}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-secondary-text\"\n />\n </Button>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n"],"names":["notFoundImg","BADGES","NOTE_ACTIONS","getBadge","type","getNotesWord","count","mod10","mod100","ApprovalLog","logs","className","onDelete","onCreate","onEdit","message","setMessage","useState","imageUrl","setImageUrl","editMessage","setEditMessage","editingId","setEditingId","selectedLogs","setSelectedLogs","selectedBadges","setSelectedBadges","fileInputRef","useRef","logsById","useMemo","item","selectedLogsSet","selectedBadgesSet","selectLog","useCallback","id","currentLogs","removeSelectedLog","clearSelectedLogs","toggleBadge","tag","currentBadges","clearSelectedBadges","createOnAction","action","target","handleOnChangeMessage","e","value","onClear","handleDelete","handleCreate","trimmedMessage","createdItem","handleEdit","updatedItem","handleOpenFilePicker","handleFileChange","file","reader","result","handleRemoveImage","handleSubmitMessage","trimmed","jsxs","cn","jsx","Typography","ConfigurableDropdownMenu","BasicAvatar","Icon","badge","Button","TextareaField"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components-approval-log-approval-log.cjs","sources":["../src/assets/images/not-found-approval-log.png","../src/components/approval-log/approval-log.tsx"],"sourcesContent":["export default \"data:image/png;base64,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\"","import notFoundImg from \"@/assets/images/not-found-approval-log.png\";\nimport {\n BasicAvatar,\n Button,\n cn,\n ConfigurableDropdownMenu,\n Icon,\n TextareaField,\n Typography,\n type DropdownMenuConfigItem,\n type DropdownMenuConfigNode,\n} from \"@/index\";\nimport { useCallback, useMemo, useRef, useState, type ChangeEvent } from \"react\";\n\nexport type ApprovalLogItem = {\n id?: string;\n userName: string;\n dateShort?: string;\n message: string;\n imageUrl?: string;\n tags: string[];\n rowState?: string;\n};\n\nconst BADGES = [\"edit\", \"sum\", \"term\", \"materials\"];\n\nconst NOTE_ACTIONS: DropdownMenuConfigNode[] = [\n { id: \"select\", label: \"Выбрать\", iconType: \"check-circle\" },\n { id: \"edit\", label: \"Редактировать\", iconType: \"pencil-simple\" },\n { id: \"delete\", label: \"Удалить\", iconType: \"trash\" },\n];\n\nconst getBadge = (type: string) => {\n switch (type) {\n case \"edit\":\n return {\n bg: \"bg-info-new-bg\",\n color: \"text-info-new-text\",\n };\n\n case \"materials\":\n return {\n bg: \"bg-contract-bg\",\n color: \"text-contract-text\",\n };\n\n case \"sum\":\n return {\n bg: \"bg-follow-up-bg\",\n color: \"text-follow-up-text\",\n };\n\n case \"term\":\n return {\n bg: \"bg-warning-bg\",\n color: \"text-warning-text\",\n };\n\n default:\n return { bg: \"\", color: \"\" };\n }\n};\n\nconst getNotesWord = (count: number) => {\n const mod10 = count % 10;\n const mod100 = count % 100;\n\n if (mod10 === 1 && mod100 !== 11) {\n return \"заметку\";\n }\n\n if (mod10 >= 2 && mod10 <= 4 && (mod100 < 12 || mod100 > 14)) {\n return \"заметки\";\n }\n\n return \"заметок\";\n};\n\ntype Props = {\n logs: ApprovalLogItem[];\n onDelete?: (ids: string[]) => void;\n onCreate?: (item: ApprovalLogItem) => void;\n onEdit?: (item: ApprovalLogItem) => void;\n className?: string;\n};\n\n// TODO: добавить виртуализацию\nexport const ApprovalLog = ({ logs, className, onDelete, onCreate, onEdit }: Props) => {\n const [message, setMessage] = useState(\"\");\n const [imageUrl, setImageUrl] = useState<string | null>(null);\n const [editMessage, setEditMessage] = useState(\"\");\n const [editingId, setEditingId] = useState<string | null>(null);\n const [selectedLogs, setSelectedLogs] = useState<string[]>([]);\n const [selectedBadges, setSelectedBadges] = useState<string[]>([]);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n\n const logsById = useMemo(() => new Map(logs.map((item) => [item.id, item])), [logs]);\n const selectedLogsSet = useMemo(() => new Set(selectedLogs), [selectedLogs]);\n const selectedBadgesSet = useMemo(() => new Set(selectedBadges), [selectedBadges]);\n\n const selectLog = useCallback((id: string) => {\n setSelectedLogs((currentLogs) => {\n if (currentLogs.includes(id)) {\n return currentLogs;\n }\n\n return [...currentLogs, id];\n });\n }, []);\n\n const removeSelectedLog = useCallback((id: string) => {\n setSelectedLogs((currentLogs) => currentLogs.filter((item) => item !== id));\n }, []);\n\n const clearSelectedLogs = useCallback(() => {\n setSelectedLogs([]);\n }, []);\n\n const toggleBadge = useCallback((tag: string) => {\n setSelectedBadges((currentBadges) => {\n if (currentBadges.includes(tag)) {\n return currentBadges.filter((item) => item !== tag);\n }\n\n return [...currentBadges, tag];\n });\n }, []);\n\n const clearSelectedBadges = useCallback(() => {\n setSelectedBadges([]);\n }, []);\n\n const createOnAction = useCallback(\n (id: string) => {\n return (action: DropdownMenuConfigItem) => {\n switch (action.id) {\n case \"select\":\n selectLog(id);\n setEditingId(null);\n break;\n case \"edit\": {\n const target = logsById.get(id);\n if (!target) {\n return;\n }\n setEditingId(id);\n setMessage(target.message);\n setImageUrl(target.imageUrl ?? null);\n setSelectedBadges(target.tags);\n setEditMessage(target.message);\n clearSelectedLogs();\n break;\n }\n\n case \"delete\": {\n onDelete?.([id]);\n removeSelectedLog(id);\n break;\n }\n\n default:\n break;\n }\n };\n },\n [\n logsById,\n clearSelectedLogs,\n onDelete,\n removeSelectedLog,\n selectLog,\n setSelectedBadges,\n ],\n );\n\n const handleOnChangeMessage = useCallback((e: ChangeEvent<HTMLTextAreaElement>) => {\n const value = e.target.value;\n setMessage(value);\n }, []);\n\n const onClear = useCallback(() => {\n setImageUrl(null);\n clearSelectedLogs();\n clearSelectedBadges();\n setMessage(\"\");\n setEditMessage(\"\");\n setEditingId(null);\n }, [clearSelectedBadges, clearSelectedLogs]);\n\n const handleDelete = useCallback(() => {\n onDelete?.(selectedLogs);\n onClear();\n }, [onDelete, onClear, selectedLogs]);\n\n // TODO: поправить при связи с бэком\n const handleCreate = (trimmedMessage: string) => {\n const createdItem: ApprovalLogItem = {\n userName: \"ОГ\",\n message: trimmedMessage,\n imageUrl: imageUrl ?? undefined,\n tags: selectedBadges.length > 0 ? selectedBadges : [],\n rowState: \"default\",\n };\n\n onCreate?.(createdItem);\n onClear();\n };\n\n const handleEdit = (trimmedMessage: string) => {\n if (!editingId) {\n return;\n }\n\n const target = logsById.get(editingId);\n if (!target) {\n return;\n }\n\n const updatedItem: ApprovalLogItem = {\n ...target,\n message: trimmedMessage,\n imageUrl: imageUrl ?? undefined,\n tags: selectedBadges.length > 0 ? selectedBadges : target.tags,\n };\n\n onEdit?.(updatedItem);\n onClear();\n };\n\n const handleOpenFilePicker = () => {\n fileInputRef.current?.click();\n };\n\n const handleFileChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file?.type.startsWith(\"image/\")) {\n return;\n }\n\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result;\n if (typeof result === \"string\") {\n setImageUrl(result);\n }\n };\n reader.readAsDataURL(file);\n\n e.target.value = \"\";\n }, []);\n\n const handleRemoveImage = useCallback(() => {\n setImageUrl(null);\n }, []);\n\n const handleSubmitMessage = () => {\n const trimmed = message.trim();\n if (!trimmed && !imageUrl) {\n return;\n }\n\n if (editingId) {\n handleEdit(trimmed);\n return;\n }\n\n handleCreate(trimmed);\n };\n\n return (\n <div\n className={cn(\"bg-primary-bg flex h-full w-full flex-col rounded-xl\", className)}\n >\n <div className=\"border-delicate-border border-b px-18 py-2.5\">\n <Typography\n variant=\"body-lg-medium\"\n className=\"text-primary-text\"\n >\n Журнал согласования\n </Typography>\n </div>\n\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n {logs.length > 0 ? (\n logs.map((item) => {\n return (\n <ConfigurableDropdownMenu\n key={item.id}\n items={NOTE_ACTIONS}\n onAction={createOnAction(item.id as string)}\n contentProps={{\n align: \"end\",\n side: \"bottom\",\n sideOffset: -72,\n }}\n trigger={\n <div\n className={cn(\n `flex cursor-pointer flex-col gap-2.5 px-4 py-3\n shadow-[0_-2px_4px_0_rgba(0,0,0,0.05)]`,\n selectedLogsSet.has(item.id as string) && \"bg-negotiation-bg\",\n editingId === item.id && \"bg-[rgba(137,204,22,0.1)]\",\n )}\n >\n <div className=\"flex gap-3\">\n <div className=\"w-fit\">\n <BasicAvatar\n initials={{\n text: item.userName,\n className: \"text-primary-text\",\n }}\n avatar={{\n className: \"h-12 w-12\",\n }}\n showDeleteOnHover={false}\n />\n\n <Typography\n variant=\"body-xxs-medium\"\n className=\"text-secondary-text text-center\"\n >\n {item.dateShort}\n </Typography>\n </div>\n\n <div className=\"flex w-full flex-col gap-2.5\">\n <div className=\"flex w-full items-center justify-between\">\n <Typography\n variant=\"body-md-medium\"\n className=\"text-primary-text\"\n >\n {item.userName}\n </Typography>\n\n <Icon\n type=\"check-circle\"\n className=\"text-sub-label-text\"\n />\n </div>\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-primary-text\"\n >\n {item.message}\n </Typography>\n {item.imageUrl && (\n <img\n src={item.imageUrl}\n alt=\"Вложенное изображение\"\n className=\"max-h-65 w-full rounded-lg object-contain\"\n />\n )}\n </div>\n </div>\n <div className=\"flex gap-3 px-4\">\n {item.tags.map((tag) => {\n const badge = getBadge(tag);\n return (\n <div\n key={tag}\n className={cn(\n \"flex items-center gap-1.25 rounded-lg border px-3 py-1\",\n badge.bg,\n badge.color,\n )}\n >\n <Typography variant=\"body-xxs-medium\">{tag}</Typography>\n\n <Icon\n type=\"check-circle\"\n size={15}\n strokeWidth={1.25}\n />\n </div>\n );\n })}\n </div>\n </div>\n }\n />\n );\n })\n ) : (\n <div\n className=\"flex h-full flex-col items-center justify-center gap-4 px-4\n text-center\"\n >\n <img\n src={notFoundImg}\n alt=\"not-found\"\n />\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-secondary-text\"\n >\n Место для важных заметок по продвижению заявки. Любые комментарии, скриншоты\n и все, что может помочь Вам освободить голову.\n </Typography>\n </div>\n )}\n </div>\n\n <div className=\"mt-auto shrink-0\">\n {selectedLogs.length > 0 ? (\n <div\n className=\"bg-secondary-bg border-delicate-border flex items-center\n justify-between rounded-b-xl border-t px-2 py-3\"\n >\n <Button\n variant=\"circleGhost\"\n onClick={onClear}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-secondary-text\"\n size={25}\n strokeWidth={1.5}\n />\n </Button>\n\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-secondary-text\"\n >\n Удалить {selectedLogs.length} {getNotesWord(selectedLogs.length)}...\n </Typography>\n\n <Button\n variant=\"circleGhost\"\n onClick={handleDelete}\n >\n <Icon\n type=\"trash\"\n className=\"text-error-text\"\n size={25}\n strokeWidth={1.5}\n />\n </Button>\n </div>\n ) : (\n <div>\n <div className=\"border-delicate-border flex justify-center gap-1 border-t p-2\">\n {BADGES.map((tag) => {\n const badge = getBadge(tag);\n return (\n <div\n key={tag}\n onClick={() => toggleBadge(tag)}\n className={cn(\n `flex w-full cursor-pointer items-center gap-1.25 rounded-lg border\n px-3 py-1`,\n badge.bg,\n badge.color,\n selectedBadgesSet.has(tag)\n ? \"border-current\"\n : \"border-transparent\",\n )}\n >\n <Typography\n variant=\"body-xxs-medium\"\n className=\"w-full text-center\"\n >\n {tag}\n </Typography>\n </div>\n );\n })}\n </div>\n\n <div\n className=\"border-delicate-border bg-secondary-bg rounded-b-xl border-t px-2\n py-3\"\n >\n {editingId && (\n <div className=\"flex justify-between\">\n <Button variant=\"circleGhost\">\n <Icon\n type=\"pencil\"\n className=\"text-secondary-text\"\n size={20}\n strokeWidth={1.5}\n />\n </Button>\n <div className=\"border-inp-default-border w-full border-l-2 pl-3\">\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-sub-label-text line-clamp-2\"\n >\n {editMessage}\n </Typography>\n </div>\n\n <Button\n variant=\"circleGhost\"\n onClick={onClear}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-secondary-text\"\n size={25}\n strokeWidth={1.5}\n />\n </Button>\n </div>\n )}\n\n <div className=\"flex items-center\">\n <input\n type=\"file\"\n accept=\"image/*\"\n ref={fileInputRef}\n className=\"hidden\"\n onChange={handleFileChange}\n />\n <Button\n variant=\"circleGhost\"\n onClick={handleOpenFilePicker}\n >\n <Icon\n type=\"plus\"\n className=\"text-secondary-text\"\n />\n </Button>\n <TextareaField\n rows={message.length < 20 ? 1 : 2}\n placeholder={\n editingId ? \"Редактирование заметки...\" : \"Напишите заметку...\"\n }\n value={message}\n onChange={handleOnChangeMessage}\n className=\"border-0! text-left placeholder:text-center\"\n />\n <Button\n variant=\"circleGhost\"\n onClick={handleSubmitMessage}\n >\n <Icon\n type=\"telegram-logo\"\n className=\"text-secondary-text\"\n />\n </Button>\n </div>\n {imageUrl && (\n <div className=\"bg-secondary-bg mt-2.5 flex items-start gap-2\">\n <img\n src={imageUrl}\n alt=\"Предпросмотр изображения\"\n className=\"max-h-50 w-full max-w-80 rounded-lg object-contain\"\n />\n <Button\n variant=\"circleGhost\"\n onClick={handleRemoveImage}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-secondary-text\"\n />\n </Button>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n"],"names":["notFoundImg","BADGES","NOTE_ACTIONS","getBadge","type","getNotesWord","count","mod10","mod100","ApprovalLog","logs","className","onDelete","onCreate","onEdit","message","setMessage","useState","imageUrl","setImageUrl","editMessage","setEditMessage","editingId","setEditingId","selectedLogs","setSelectedLogs","selectedBadges","setSelectedBadges","fileInputRef","useRef","logsById","useMemo","item","selectedLogsSet","selectedBadgesSet","selectLog","useCallback","id","currentLogs","removeSelectedLog","clearSelectedLogs","toggleBadge","tag","currentBadges","clearSelectedBadges","createOnAction","action","target","handleOnChangeMessage","e","value","onClear","handleDelete","handleCreate","trimmedMessage","createdItem","handleEdit","updatedItem","handleOpenFilePicker","handleFileChange","file","reader","result","handleRemoveImage","handleSubmitMessage","trimmed","jsxs","cn","jsx","Typography","ConfigurableDropdownMenu","BasicAvatar","Icon","badge","Button","TextareaField"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components-approval-log-approval-log.js","sources":["../src/assets/images/not-found-approval-log.png","../src/components/approval-log/approval-log.tsx"],"sourcesContent":["export default \"data:image/png;base64,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\"","import notFoundImg from \"@/assets/images/not-found-approval-log.png\";\nimport {\n BasicAvatar,\n Button,\n cn,\n ConfigurableDropdownMenu,\n Icon,\n TextareaField,\n Typography,\n type DropdownMenuConfigItem,\n type DropdownMenuConfigNode,\n} from \"@/index\";\nimport { useCallback, useMemo, useRef, useState, type ChangeEvent } from \"react\";\n\ntype ApprovalLogItem = {\n id?: string;\n userName: string;\n dateShort?: string;\n message: string;\n imageUrl?: string;\n tags: string[];\n rowState?: string;\n};\n\nconst BADGES = [\"edit\", \"sum\", \"term\", \"materials\"];\n\nconst NOTE_ACTIONS: DropdownMenuConfigNode[] = [\n { id: \"select\", label: \"Выбрать\", iconType: \"check-circle\" },\n { id: \"edit\", label: \"Редактировать\", iconType: \"pencil-simple\" },\n { id: \"delete\", label: \"Удалить\", iconType: \"trash\" },\n];\n\nconst getBadge = (type: string) => {\n switch (type) {\n case \"edit\":\n return {\n bg: \"bg-info-new-bg\",\n color: \"text-info-new-text\",\n };\n\n case \"materials\":\n return {\n bg: \"bg-contract-bg\",\n color: \"text-contract-text\",\n };\n\n case \"sum\":\n return {\n bg: \"bg-follow-up-bg\",\n color: \"text-follow-up-text\",\n };\n\n case \"term\":\n return {\n bg: \"bg-warning-bg\",\n color: \"text-warning-text\",\n };\n\n default:\n return { bg: \"\", color: \"\" };\n }\n};\n\nconst getNotesWord = (count: number) => {\n const mod10 = count % 10;\n const mod100 = count % 100;\n\n if (mod10 === 1 && mod100 !== 11) {\n return \"заметку\";\n }\n\n if (mod10 >= 2 && mod10 <= 4 && (mod100 < 12 || mod100 > 14)) {\n return \"заметки\";\n }\n\n return \"заметок\";\n};\n\ntype Props = {\n logs: ApprovalLogItem[];\n onDelete?: (ids: string[]) => void;\n onCreate?: (item: ApprovalLogItem) => void;\n onEdit?: (item: ApprovalLogItem) => void;\n className?: string;\n};\n\n// TODO: добавить виртуализацию\nexport const ApprovalLog = ({ logs, className, onDelete, onCreate, onEdit }: Props) => {\n const [message, setMessage] = useState(\"\");\n const [imageUrl, setImageUrl] = useState<string | null>(null);\n const [editMessage, setEditMessage] = useState(\"\");\n const [editingId, setEditingId] = useState<string | null>(null);\n const [selectedLogs, setSelectedLogs] = useState<string[]>([]);\n const [selectedBadges, setSelectedBadges] = useState<string[]>([]);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n\n const logsById = useMemo(() => new Map(logs.map((item) => [item.id, item])), [logs]);\n const selectedLogsSet = useMemo(() => new Set(selectedLogs), [selectedLogs]);\n const selectedBadgesSet = useMemo(() => new Set(selectedBadges), [selectedBadges]);\n\n const selectLog = useCallback((id: string) => {\n setSelectedLogs((currentLogs) => {\n if (currentLogs.includes(id)) {\n return currentLogs;\n }\n\n return [...currentLogs, id];\n });\n }, []);\n\n const removeSelectedLog = useCallback((id: string) => {\n setSelectedLogs((currentLogs) => currentLogs.filter((item) => item !== id));\n }, []);\n\n const clearSelectedLogs = useCallback(() => {\n setSelectedLogs([]);\n }, []);\n\n const toggleBadge = useCallback((tag: string) => {\n setSelectedBadges((currentBadges) => {\n if (currentBadges.includes(tag)) {\n return currentBadges.filter((item) => item !== tag);\n }\n\n return [...currentBadges, tag];\n });\n }, []);\n\n const clearSelectedBadges = useCallback(() => {\n setSelectedBadges([]);\n }, []);\n\n const createOnAction = useCallback(\n (id: string) => {\n return (action: DropdownMenuConfigItem) => {\n switch (action.id) {\n case \"select\":\n selectLog(id);\n setEditingId(null);\n break;\n case \"edit\": {\n const target = logsById.get(id);\n if (!target) {\n return;\n }\n setEditingId(id);\n setMessage(target.message);\n setImageUrl(target.imageUrl ?? null);\n setSelectedBadges(target.tags);\n setEditMessage(target.message);\n clearSelectedLogs();\n break;\n }\n\n case \"delete\": {\n onDelete?.([id]);\n removeSelectedLog(id);\n break;\n }\n\n default:\n break;\n }\n };\n },\n [\n logsById,\n clearSelectedLogs,\n onDelete,\n removeSelectedLog,\n selectLog,\n setSelectedBadges,\n ],\n );\n\n const handleOnChangeMessage = useCallback((e: ChangeEvent<HTMLTextAreaElement>) => {\n const value = e.target.value;\n setMessage(value);\n }, []);\n\n const onClear = useCallback(() => {\n setImageUrl(null);\n clearSelectedLogs();\n clearSelectedBadges();\n setMessage(\"\");\n setEditMessage(\"\");\n setEditingId(null);\n }, [clearSelectedBadges, clearSelectedLogs]);\n\n const handleDelete = useCallback(() => {\n onDelete?.(selectedLogs);\n onClear();\n }, [onDelete, onClear, selectedLogs]);\n\n // TODO: поправить при связи с бэком\n const handleCreate = (trimmedMessage: string) => {\n const createdItem: ApprovalLogItem = {\n userName: \"ОГ\",\n message: trimmedMessage,\n imageUrl: imageUrl ?? undefined,\n tags: selectedBadges.length > 0 ? selectedBadges : [],\n rowState: \"default\",\n };\n\n onCreate?.(createdItem);\n onClear();\n };\n\n const handleEdit = (trimmedMessage: string) => {\n if (!editingId) {\n return;\n }\n\n const target = logsById.get(editingId);\n if (!target) {\n return;\n }\n\n const updatedItem: ApprovalLogItem = {\n ...target,\n message: trimmedMessage,\n imageUrl: imageUrl ?? undefined,\n tags: selectedBadges.length > 0 ? selectedBadges : target.tags,\n };\n\n onEdit?.(updatedItem);\n onClear();\n };\n\n const handleOpenFilePicker = () => {\n fileInputRef.current?.click();\n };\n\n const handleFileChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file?.type.startsWith(\"image/\")) {\n return;\n }\n\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result;\n if (typeof result === \"string\") {\n setImageUrl(result);\n }\n };\n reader.readAsDataURL(file);\n\n e.target.value = \"\";\n }, []);\n\n const handleRemoveImage = useCallback(() => {\n setImageUrl(null);\n }, []);\n\n const handleSubmitMessage = () => {\n const trimmed = message.trim();\n if (!trimmed && !imageUrl) {\n return;\n }\n\n if (editingId) {\n handleEdit(trimmed);\n return;\n }\n\n handleCreate(trimmed);\n };\n\n return (\n <div\n className={cn(\"bg-primary-bg flex h-full w-full flex-col rounded-xl\", className)}\n >\n <div className=\"border-delicate-border border-b px-18 py-2.5\">\n <Typography\n variant=\"body-lg-medium\"\n className=\"text-primary-text\"\n >\n Журнал согласования\n </Typography>\n </div>\n\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n {logs.length > 0 ? (\n logs.map((item) => {\n return (\n <ConfigurableDropdownMenu\n key={item.id}\n items={NOTE_ACTIONS}\n onAction={createOnAction(item.id as string)}\n contentProps={{\n align: \"end\",\n side: \"bottom\",\n sideOffset: -72,\n }}\n trigger={\n <div\n className={cn(\n `flex cursor-pointer flex-col gap-2.5 px-4 py-3\n shadow-[0_-2px_4px_0_rgba(0,0,0,0.05)]`,\n selectedLogsSet.has(item.id as string) && \"bg-negotiation-bg\",\n editingId === item.id && \"bg-[rgba(137,204,22,0.1)]\",\n )}\n >\n <div className=\"flex gap-3\">\n <div className=\"w-fit\">\n <BasicAvatar\n initials={{\n text: item.userName,\n className: \"text-primary-text\",\n }}\n avatar={{\n className: \"h-12 w-12\",\n }}\n showDeleteOnHover={false}\n />\n\n <Typography\n variant=\"body-xxs-medium\"\n className=\"text-secondary-text text-center\"\n >\n {item.dateShort}\n </Typography>\n </div>\n\n <div className=\"flex w-full flex-col gap-2.5\">\n <div className=\"flex w-full items-center justify-between\">\n <Typography\n variant=\"body-md-medium\"\n className=\"text-primary-text\"\n >\n {item.userName}\n </Typography>\n\n <Icon\n type=\"check-circle\"\n className=\"text-sub-label-text\"\n />\n </div>\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-primary-text\"\n >\n {item.message}\n </Typography>\n {item.imageUrl && (\n <img\n src={item.imageUrl}\n alt=\"Вложенное изображение\"\n className=\"max-h-65 w-full rounded-lg object-contain\"\n />\n )}\n </div>\n </div>\n <div className=\"flex gap-3 px-4\">\n {item.tags.map((tag) => {\n const badge = getBadge(tag);\n return (\n <div\n key={tag}\n className={cn(\n \"flex items-center gap-1.25 rounded-lg border px-3 py-1\",\n badge.bg,\n badge.color,\n )}\n >\n <Typography variant=\"body-xxs-medium\">{tag}</Typography>\n\n <Icon\n type=\"check-circle\"\n size={15}\n strokeWidth={1.25}\n />\n </div>\n );\n })}\n </div>\n </div>\n }\n />\n );\n })\n ) : (\n <div\n className=\"flex h-full flex-col items-center justify-center gap-4 px-4\n text-center\"\n >\n <img\n src={notFoundImg}\n alt=\"not-found\"\n />\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-secondary-text\"\n >\n Место для важных заметок по продвижению заявки. Любые комментарии, скриншоты\n и все, что может помочь Вам освободить голову.\n </Typography>\n </div>\n )}\n </div>\n\n <div className=\"mt-auto shrink-0\">\n {selectedLogs.length > 0 ? (\n <div\n className=\"bg-secondary-bg border-delicate-border flex items-center\n justify-between rounded-b-xl border-t px-2 py-3\"\n >\n <Button\n variant=\"circleGhost\"\n onClick={onClear}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-secondary-text\"\n size={25}\n strokeWidth={1.5}\n />\n </Button>\n\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-secondary-text\"\n >\n Удалить {selectedLogs.length} {getNotesWord(selectedLogs.length)}...\n </Typography>\n\n <Button\n variant=\"circleGhost\"\n onClick={handleDelete}\n >\n <Icon\n type=\"trash\"\n className=\"text-error-text\"\n size={25}\n strokeWidth={1.5}\n />\n </Button>\n </div>\n ) : (\n <div>\n <div className=\"border-delicate-border flex justify-center gap-1 border-t p-2\">\n {BADGES.map((tag) => {\n const badge = getBadge(tag);\n return (\n <div\n key={tag}\n onClick={() => toggleBadge(tag)}\n className={cn(\n `flex w-full cursor-pointer items-center gap-1.25 rounded-lg border\n px-3 py-1`,\n badge.bg,\n badge.color,\n selectedBadgesSet.has(tag)\n ? \"border-current\"\n : \"border-transparent\",\n )}\n >\n <Typography\n variant=\"body-xxs-medium\"\n className=\"w-full text-center\"\n >\n {tag}\n </Typography>\n </div>\n );\n })}\n </div>\n\n <div\n className=\"border-delicate-border bg-secondary-bg rounded-b-xl border-t px-2\n py-3\"\n >\n {editingId && (\n <div className=\"flex justify-between\">\n <Button variant=\"circleGhost\">\n <Icon\n type=\"pencil\"\n className=\"text-secondary-text\"\n size={20}\n strokeWidth={1.5}\n />\n </Button>\n <div className=\"border-inp-default-border w-full border-l-2 pl-3\">\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-sub-label-text line-clamp-2\"\n >\n {editMessage}\n </Typography>\n </div>\n\n <Button\n variant=\"circleGhost\"\n onClick={onClear}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-secondary-text\"\n size={25}\n strokeWidth={1.5}\n />\n </Button>\n </div>\n )}\n\n <div className=\"flex items-center\">\n <input\n type=\"file\"\n accept=\"image/*\"\n ref={fileInputRef}\n className=\"hidden\"\n onChange={handleFileChange}\n />\n <Button\n variant=\"circleGhost\"\n onClick={handleOpenFilePicker}\n >\n <Icon\n type=\"plus\"\n className=\"text-secondary-text\"\n />\n </Button>\n <TextareaField\n rows={message.length < 20 ? 1 : 2}\n placeholder={\n editingId ? \"Редактирование заметки...\" : \"Напишите заметку...\"\n }\n value={message}\n onChange={handleOnChangeMessage}\n className=\"border-0! text-left placeholder:text-center\"\n />\n <Button\n variant=\"circleGhost\"\n onClick={handleSubmitMessage}\n >\n <Icon\n type=\"telegram-logo\"\n className=\"text-secondary-text\"\n />\n </Button>\n </div>\n {imageUrl && (\n <div className=\"bg-secondary-bg mt-2.5 flex items-start gap-2\">\n <img\n src={imageUrl}\n alt=\"Предпросмотр изображения\"\n className=\"max-h-50 w-full max-w-80 rounded-lg object-contain\"\n />\n <Button\n variant=\"circleGhost\"\n onClick={handleRemoveImage}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-secondary-text\"\n />\n </Button>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n"],"names":["notFoundImg","BADGES","NOTE_ACTIONS","getBadge","type","getNotesWord","count","mod10","mod100","ApprovalLog","logs","className","onDelete","onCreate","onEdit","message","setMessage","useState","imageUrl","setImageUrl","editMessage","setEditMessage","editingId","setEditingId","selectedLogs","setSelectedLogs","selectedBadges","setSelectedBadges","fileInputRef","useRef","logsById","useMemo","item","selectedLogsSet","selectedBadgesSet","selectLog","useCallback","id","currentLogs","removeSelectedLog","clearSelectedLogs","toggleBadge","tag","currentBadges","clearSelectedBadges","createOnAction","action","target","handleOnChangeMessage","value","onClear","handleDelete","handleCreate","trimmedMessage","createdItem","handleEdit","updatedItem","handleOpenFilePicker","handleFileChange","file","reader","result","handleRemoveImage","handleSubmitMessage","trimmed","jsxs","cn","jsx","Typography","ConfigurableDropdownMenu","BasicAvatar","Icon","badge","Button","TextareaField"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components-approval-log-approval-log.js","sources":["../src/assets/images/not-found-approval-log.png","../src/components/approval-log/approval-log.tsx"],"sourcesContent":["export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAC8CAYAAAA96+FJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAGLxJREFUeAHtnd2OFEUbxwtYP0F3IFkTjJFeSeRAk91NOMAD4nIghCPhCliuQLwClisQr8DlCuA9MrseMCSeSbK7RI0eCCMHGPWA2XVVUNT3+Tf1DDW9XT3dPf1RT039kqHnc5nprn89H1X11B4VqJXPP/88mpqauvDff/8t0cMo8XKPbt09e/Zc++CDD7oqJ+vr65fpsEi3TxcWFm6oQG3sUYFauH79eufAgQOXSRiXzOdffPHF+PjkyZP4ZnDjn3/++fjs2bO9rL9L4likw039sE8COagCtTGlApUDq7Fv376bJI4Ij19//fX4dvDgcFv+7bff1E8//aR+/vln9ejRo3P0mcXV1dWLZ86cyWsV+ipQK8GCVAyLg+5Gr7zyipqbm1MvvfRS5mf+/PNPdffuXfXgwYP4MdwxEsk12/vJiiz9+++/0d69e1fIgvRUoDaCQCpmbW3tntLiOH78uKL4I/dnIZIffvgBd/vkbi2McrcC9bNXBSrjiy++QPAcIc4oKg7w1ltvxa4Y0SEr9JkKtE4QSIXoTJU6duxYYXEwxmcXSXCLKtAqIUivCAquz9EhosyVeu2111RZII4333wzdrfIzcLf7Nreq+OdDpIBlCrm4xF6qUO3ef22Lv2dK8FdK0cQSEVQw1zEUbtIY3Ho0KFYIBSEf0gxzQYdpyklPIujetrwIYDI+L+HjgmWkB2jtPPC+fPnQ9arIEEg1TGHf1599VU1LkY6OKLbZ5Sxglh2vQ/WBhky3HAfsQ/uP/fcc4Pxlm+++Qbp5Gj//v2wRisqUIggkOqI8A83zHE5cuSI2t7eHjR+84hb3v9nZmYmHm/hMZlAMYJARoARcep9I4ufH6mEu5MYHS/N22+/raqAx2D0dy4FjbvgNyKzFrt3LDZ6fO/vv/++5fNYTBCIeioCGre4YPj5kXGLGeHnD9ybUYOCTQN3SxMlX+OGT5aJO4BpcudmcVTPfn9H3wbwOYDrRyLp0d85TyLZUB4y8QOF5sh32utwa3BDbJHm55v+votglP7LL79EDNOn7BqmsHCGa1fDH4MeBjYJ75IAE29BqOEsKz3yjQxUMvAtO57hCoYFgRiWVD2gk/EyCTDxAiF34X0c33nnHQWR+AaLHLGRLRtWBb4mAUIMomfEVhVcuwgLhBrxyPeSqxQLid9vfg6xByUsEHfs+tw4SQCXmXiB0MXfpIs7D189OR3dF+AuPnr0KL5BLBAAhMBi4Bsej+KPP/5QmC2AmwmdRy9PXnCx9uyJLQilK5WvcBIB4yF53ou4hcdaOCYDDx8+jKfk7+zsDKyJQbAgPpDM6dNg3Bx6RfSuvsKBOho7prGUzcbxoi+Mzv/+++/x5zmmwRiR8pDWBLK2tnaVDhunT59eURWQM6cfJT/HjcfnGIQtABo4ZguPA/7G/fv3Y2sEl8wI+iPlIa0JhBpxxzbolgXWZNNFWUzMWh3k9DmgxDHP3+eAEzGIr3CquqpOAPEHBIK/Z6SRcW0i30bVxbhYOPl0oa9Tw59XFcIC8dnFYguCuV1VwKJAYJ/AOzerMYHoEetF4ylYgPfJ1YofUMPvZxUrwIBe1eIw8TlIrxoWXDLrRdcX19SrKSeNCYQCwD41wvf5sY4TBq/r+6kCgfWg1y+ogthy+maKk10yLsMjdeScvz+sBI5wGWEVIXxknwAC9Crgc5QcV6HHs8ozGmsNp06dQjr1Ij9eXV1doUM3Z5Ae2V5AI+eGwPn8vINigAfRAP6GiwLh38d+Pxo/H/n+qPgC2aejR4+qKrBZEBVcrNbopT2JRtPv960DXJy+xBQSnnLB86zMuVa3b9+Oe1k0wCZn43LDNxs8P4cjP5+H5O8z15Dg91c5jYbTwcnz7uNouhSB7JoliovD4kDviHXgPLhVdIatWe2wCrhHN3t4PkKELIAi388UenLxVNOTKjlIT7HSkfKM1gRCrtAyNZJc06MxjXpzc7NvDkZhNBfigDBQnG0c2GrkSfVW4e4wo5bMujqVPmMCZKQ8ozWBFK2yoaeEDATy119/xUfUkhoXFgjKgKKXTnN3ivT6o9wd19eQ5MEyATLEIC3SU0YPxf5vFb41rBCPDpOlynyvOVcp2eubsY7vYAEZOgyIxJjd28GMBp8WTom5ktRT/WimhXFRIBL09OMG1mjQqISIiXgI1iWuHGwaFoVlsDAIpAWGTjqLparAmgu24RYYjS3Vi7lwypJ1lIiY0qPUU/XMx5xJyTOFO1A9fP6TAvFtZaEYgZBJT7UgYYpIO7AFSbpYmISqPEKMQKinGprjw6lFnycZuoxNIMqzVK+k6u5DFoSDRJ/XcbiMLUjX62+8QYxAkusMJmEdh8vYgvQ6Z1y3gbT9QXp8ZxLWcbhO2pws35beNprmpTGGiA7zlAo8onuaiLMe+sTGOXSsDaHHPVQcISGsUyC+efDgwQ2MppslaEAI0tsDmSx0ULoEKT8dKY+oVSAQBInhQ2rUi+rpvt5Dy2JByrLYjhYL1oAs8snf3t7uYSrI48eP4zchSMdnpa/jkAzcLN+X3lbeqkgUKJzwEYsi77qMHES4CCwQAJHAvLu6jsN3Royme0FlrYqEsUgnDJtYVimKIZIi4OkmMPN1ruMIFiodPufJ6+3T0tuxr7opDFUzaQIBZasiZi1TNY+YhHjixAkVGCZjZaE3VRZLC6RJYTDJwsscv4xK9WISorl+w1ypl9zaAEILExTzMQnTTQoLBDGGFsYl1TBJC5K33hNe5+npKHzmy9YGbcP1eX1eeluohWirgQ3uI9UCyQad14KEGbr1YFt661Mh69wDheSnf5K1E1MTJF0sFkwYTW8HtsJcTcZgciyIdqmuqwZjjSzMMj0smDxl+wP1kLb01qfR9EyBYKCvbauRxBRImI81mlFFJuB+YsvpsvDeI+ikfBxNtwrERXEA21hIFUtvJZE3RW0rGWQmK8bBViOrzGj62tra9dOnT59XDmE9O7pQdKQcw5bq9WnaOxeNS9bUcjFFXXEh63PKMVIFgoDc1WnLaRaEG4/rm3DmraSYp9d3JUWdUcga7Uf8aPqus0ziWFItjHHkJWlB+HGbFiRvJcW0QnHSByYzCll7EaindUOXlcNkTTepg6xenwNf/l5pheK41/d1RJ4tSEoHFY367Orq6jK5yEPtjeKQgdLIKl05e/bssmqRodZGF/yy69MEbAIpunAqb6+fViiOe/1JKhRng4VfZuntmTNnlumwzI8hDgrSi287ViODK4vxDhLHknIcm4s1auEU5mPhlgxy03p9pD7DPKx8ZExYjJQHDARCPTEyCJFyHAgCN+6xWCAoZp1F6PXrg8emfBwLMVuJ07GHiSkQviCjLAhbikD1mJXezTq9qiDkwVxRjhF3v+RexevDlRCef/75wX0zixVKALUDxmJAIg7p6K25c6NjEqeIWxc1siUliGQckteKBHZTRcfi89Lb2MWiBvd+Xctk68A27b3upbfSyJuiRlyG6vZlyRgsxM5GPSWYKZ29ElXsKykQBN/cAMosvZWGaylqn5fe4uyIq4Rnm4/lg4tl9vrJaSiupqht87F8WHo7RY1NnEBsS29drrJYdPZtstfHLliupqgzCll7EYNEShiuzejNs7EnMHt9NHw0+LI787oEB+k+DhZOUeMab4vYFmhqPlaVay58HpjMsCDil95CIB1JGSwmbWVhERdL0poLCeA8JFcW+rD0dkrqtGTTzcobpP/666/q66+/FrfmQgK+FrIWGYMANF7eKz1vIeuZmRn13nvvhV6/BlAja5xC1hhuUE+D+gg3uobTJLZZPSuYX+N1JvEuAKj2rz+Oqv8/Uju4R/8/9vHeIEtfyU67YrvItFm9eQpZB3HUw6ilt3rri1gA2P6CG78eg0NF/8j8ENz+lMr/qc/x8/gMW6+trS2sZrxF/88NEktXlUSsQNJSvRAIerEwmt48tsHCw4cPryPJYWI2fluDHxf6uxDePAnmI2ydQR3oMlm5a6og0naYGpAUiAtLbyVS1diRbeltikVpg4i+xwoJ5d7Ozs6FIh/0xsUKNbKGKZKiRlw2bkLCZkEc67BYKEv0PS+S69Ub9QGcFbwpUsIwp7yDSdqz0MUUta0+lqMWHTWmb1JcdB5b+2W90asgHUiejyW5LJCtkLUjLlYakRbJqSyRiLUgtqW3LrpYk1AWiEXJKwv5enAq3lE6WiQLNncLA4U/1pVJqJs0gTRdyDqUBXpGWiFrhy0IY4pk19gJWxCR1FnIOpQFKg4XssY5MlcZmhbFUSK9782uusCYi9VTQilbyFrimgsJ2GpkCRAIOEdW5Bx1bjfMJ6eoQW0Yc2dEUWbaO8oDra+vi1tzIQHbnoVZ039cgnTwCYmka7pa4l0sEy5kDRfIVsgac4ZOnjypAtUjZCwki4g6XdSlXuYn9mq19JRAfEz1SoY7rDQXSwrkhXxkPo5bFGUdbimB2AYLw3STdrDUx5J2PTrYrJYfxAIh1XSVQGzTTSZhNN1FbPWxJFkQoLc5j4ltIvmMXYmBum3C4qTPx0pLUSMRgSREnXgQgzDzWJ+C8CNuYRhF3N7eRiwibnWhOVgoobrJuJRNUTeVRUpbeitQINABpst3B2eN4pBryQBFAubKQsn1sXwpC5S29FZiTKjLYT0TCFZeYXGJEkaZpbdNM0llgfB98TuFDhYO4Go/ZgvCjEZxblbZpbdVEMoC7SYrUJckEGIR/wyuCgISutAb/IIUbNNNxi1kHcoClcMWqMPKC+sEIgTqQ9+YftSn1MAWlSDSBAJGFbKmHz9o7NK3YnYJm0CkpXo1neQV7iphblbZQtb3798PvX4N2KqbSAzUsX3DkEDgZm1tbYnKZpUtZD03J67iqghs20JLFAhldmd3RU2k/KtKEK4Vsp502PoKWnqbRbRLIHrpYVcJwRaDJGsxBcpRdNDVnLBoikJih4XCdqlRJgVYVyQF62krC5teeiuNIinqd999t9DOXTyaLmzp7S7oOx9MFQhKNdKJ6yohKV/TzQr1sdpPUfPSW+HTTdCupq15SvpxH9OPW1cCwLR3s3oG12kdtfRWGlLKAmXVyJI2FmL9tqgVRBmtTyVktNKmvbMLIQHfygLZUr0S3axMOdMPWqbGhlqmTo+L2JbeopHZlt42xSSWBcoaTU8ucnOdTIFgXIRGnC9Sg7uuHMa29LZOCxLKAtlxvJB1IUZeGZRBoYAdpVDOKUfJmm5ShlAWaDw8WjiVrzYvKmFjfnxykxNXsAlkVA7/wYMH8ZwsH7ZidglbkO6lBQGGq3VTOUjZ6ibs5viwFbNLZNXHkkbubhBjI5TVukJW5LJyjLKFrLFnYaB6bIWsBQqkV2gFy/T09DIdbigHMa0I3w/VTdqDXVDTikh0sQov8UI8QtmJnnIMMyYI9bHaJ61GVnJ+luvQd90qLBDEI/TBU66JpOpMVmA8fKiRhcLupVIxmPGLnXn0VBQnBhGTApnUae95UtTHjx+vfQA1K9UrKAPYL/1NDZEgs9W6SJKZLGRSRhWyloS0skA+jIWUtiAM5mvVLZLHjx/HxxdeeCHzfWWX3rqAj2WBfJiPReLujd2V1C0S9Ji4HT16NPN9yTk+LlRZnOSyQGxBhK9N71dy1puwJKNoeultKAuUjQ9BOtp1Zd2SFskCNdSbbUxJqSqLJWXNhetkzeiVAGVp462hK72CHLiPK5Lvv/9+cGI5Bvn2228Hr8PdSotJ0pbejnKxfvnlF3X37l0vtmJ2jbRC1lIsCHZ/xrHyLs4QyXUSybwqweHDhwf3OQZ54403Bs/ZAnbTzcobpMMCHDt2zJutmF1CciFr3jOnFh9AV0ZZ2NraulpmRSKPwgJYEAjCfM5GmULWbC0C1cOFrHH+OasFJIyFkKhjF6vWasLT09OXyFRdUQ0R9ix0C+GBev0CAZjgSD7oQtmpKTjJo8ZAGFugjl4sUAz08uOmyKUOFiJA562gG7FzRhr4M1WwlNChQ4fiWx5sAgmTFofJm6JGAz9x4oQqCwtE4NLbwaa2jTmCOi45RXHJcl1rSmxjIZMyYdG1FLXUhVPUbgYLAxuPlOBykTVZqWO8xMXR9CqQWhbowIED8VGaQOj7Nm9BTHQqGIOKy1XW3ZI4H8vnskBsQYS5WF2OP0BruTb9JS6RUG5Qw/6sCmuSXHrLFqQNFyuUBRK79HbFfND6mcda9yqtSdra9KoLWYeyQPlhgZhWxGWBmO4VcKJrMqzJ1XFjk7TpJnktiLQ1FxJIK2TtsIvV1cmkAU5dRf3lZkkol0goH5URim1Tz6xC1js7O+qrr74afF7KmgsJCCtkvZJ8wslujoRyVccmcLsuFPlsmWnvyLacPHky9Po1kLVnoUvnGwPZlGG9lnze2Y2rYU3oCy9RzzNbZBS+7LT3II56kDKazpMTkzi/s7sWymzeckNtFLIO2JFSyBq7qqU9L6bbJKGs0GGFXK8lavSXbfFJVQunJpk8Keq827LxLGzHd71dSQbnjDi/AkIhkXRJJEv08EJSKGULWU8KTaeoJczotVkPINLx1mrnKStDgfykTnl3NUUtIAaxWg8gOjLVP2yJhLLMQrGNpiOVKxXpZYF4bMrFTT2zrAfwInWTFArd/1Dp6iouz8ealLJAvLLQXHrrgotFiYNPs6wH8Cq3yUK5c+cOtoyLd8Qys1hN5t5DWaBnpGWyuJB10iVuCmRE6f+/Oup9Xib/6cdvseUAPJqOHnlcgYSyQMXgzBdg68G0KRBqH8ujrAfw9Qr1zAcsEDTgrAINtl5f4lbMLoBz991338VHrNVJCgQFNlrqJFbIal/L80YvBYKiw+ZjcywkK3e/sbEx1NtLWHPhArYkAmqO4QhrToO9uz7XRhyiXauP877fVwvSNx/kDdTHWX/tI3ndySxgOeBmJq0HaDqTReKI97YxF0SNwkuBoCq3eUF8WXpbFXkXc+UF5xqdENxLHHG++WjWw0r7Hk1C4riYJ+4wmSgLMgnzsfKMmeQ9DzhvaPy4IZg27/MtzTK4COqzkTgK76/ppUAWFhZ6lOodPPZhPlZaj582ZpIHNHyzwSd7/aYaflMZLIhDb0BbGJ/zjD26Rbjj8nysutydZM+PI4ugrdRqEq56UifjiAN4KxBqCH0emGqrPpZtYqDpAhVxd7iRS3d3QKfT2VWmqUoQkNM5+5jEsaLGwFuB6LUjcXV5bjwYC3n48GGuadpZ5J0ikocsd8d8zpVevwwsah4cffnll2tNmetU7nlU9FRj4rNAfjRH0zGOgQmL2Htkfn4+9QJluTtlglzT3Un2+q65O2VgywVLYFo3FgLfb5gbOluVO5Wbhc8xyNAJQq+FBg7X5vbt27H/ixTkOO4ON/ikry/N3UmDG3hW43dJ3HqM42KZTFUWPscgPfMxLiaKYMMtYmuQhi2n76O7k9bbt9TrjwUCcUw8rMpqmEyMBQFo4Ig/YDXYWkgNcpPwb0hr8KYV8IwVrOcoOvhXBG8FQiduw9bgYR2yRnhdQ5q7UydwpehwTVuMnqqZibIgrqEvdk+7g32dWOiRuOPn9+/fr2ZmZiJq/PP0/By9Pt/GDsIuoHed/V9drpSNPcpjNjc3H1KDanzfdp2Djxs5blifQsd79NwW5onhOYz2qxJQmhq/Z55EM0fHWUM4rexPXyeGtbiBGs6qBXwXSB2b9fS0AHpqd6+PXq5Pjb9x62URTqfsTsNtoM/rBh2Rqr1VxTjGuHgtkPX19Y4uhj2ykRi9ftzIk+6Oetrwe0ogJB78/o4hniP0+yK6H7VleQz3EoLYcEUQSbwWCHPnzp0l9bSQQz/N3VEt9fquwAJST0V0hI4HISJ+Du/RgmI6acLSjZ7P48DN1Occ4xQ9pTugJgLsQCAQCAQCgUAgEAgEAh4xEVks6VC6GmM55+h2lbJtueo5BaohCMRxSByLdLipHyIdPd5qr0AhJmOGm2zMwbOJHatpiyAQx9EDmLN0u4SHKhAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAg4A9hPUiF6OJtRepM5Xm/WUpnJKGcTrV4LxBqtJG+y42RH6Pg8+C+rgOlEu9FraddjVjXhJJW6rOv61YNSG4RoZ7WCItB4Ty+r+tZxX9DPRNr/JzvghQnEN1LR/qGQmeR0bgjLnA2qUWe20JvecfF4vpaYFwsLn4NxyYLT1eB0wIhMSxOTU3FxZmNyubSeu7AMIPyrnQ9u0+ePNlsqzB1HpwUCKzEvn377qkghkkBNZAXXLQuzloQEsk5cp9QyWNOUoXyQH70nh+32tzeYBRiYhBdYDnSxZVnubiyjjk6Pu6PIRkuZK0TAYM9UkgMiE02pAT3XmWxdMaqY96MTBVENK0sGaoQ1D8jUaXdzHb19Otb+vWH1OC3jNfiz/mU2QrjICmkjGdEKW9Lew6pY4iwrdpVZoNN0ks8To6v9KVlmJrg/7EWbAnX+5A7AAAAAElFTkSuQmCC\"","import notFoundImg from \"@/assets/images/not-found-approval-log.png\";\nimport {\n BasicAvatar,\n Button,\n cn,\n ConfigurableDropdownMenu,\n Icon,\n TextareaField,\n Typography,\n type DropdownMenuConfigItem,\n type DropdownMenuConfigNode,\n} from \"@/index\";\nimport { useCallback, useMemo, useRef, useState, type ChangeEvent } from \"react\";\n\nexport type ApprovalLogItem = {\n id?: string;\n userName: string;\n dateShort?: string;\n message: string;\n imageUrl?: string;\n tags: string[];\n rowState?: string;\n};\n\nconst BADGES = [\"edit\", \"sum\", \"term\", \"materials\"];\n\nconst NOTE_ACTIONS: DropdownMenuConfigNode[] = [\n { id: \"select\", label: \"Выбрать\", iconType: \"check-circle\" },\n { id: \"edit\", label: \"Редактировать\", iconType: \"pencil-simple\" },\n { id: \"delete\", label: \"Удалить\", iconType: \"trash\" },\n];\n\nconst getBadge = (type: string) => {\n switch (type) {\n case \"edit\":\n return {\n bg: \"bg-info-new-bg\",\n color: \"text-info-new-text\",\n };\n\n case \"materials\":\n return {\n bg: \"bg-contract-bg\",\n color: \"text-contract-text\",\n };\n\n case \"sum\":\n return {\n bg: \"bg-follow-up-bg\",\n color: \"text-follow-up-text\",\n };\n\n case \"term\":\n return {\n bg: \"bg-warning-bg\",\n color: \"text-warning-text\",\n };\n\n default:\n return { bg: \"\", color: \"\" };\n }\n};\n\nconst getNotesWord = (count: number) => {\n const mod10 = count % 10;\n const mod100 = count % 100;\n\n if (mod10 === 1 && mod100 !== 11) {\n return \"заметку\";\n }\n\n if (mod10 >= 2 && mod10 <= 4 && (mod100 < 12 || mod100 > 14)) {\n return \"заметки\";\n }\n\n return \"заметок\";\n};\n\ntype Props = {\n logs: ApprovalLogItem[];\n onDelete?: (ids: string[]) => void;\n onCreate?: (item: ApprovalLogItem) => void;\n onEdit?: (item: ApprovalLogItem) => void;\n className?: string;\n};\n\n// TODO: добавить виртуализацию\nexport const ApprovalLog = ({ logs, className, onDelete, onCreate, onEdit }: Props) => {\n const [message, setMessage] = useState(\"\");\n const [imageUrl, setImageUrl] = useState<string | null>(null);\n const [editMessage, setEditMessage] = useState(\"\");\n const [editingId, setEditingId] = useState<string | null>(null);\n const [selectedLogs, setSelectedLogs] = useState<string[]>([]);\n const [selectedBadges, setSelectedBadges] = useState<string[]>([]);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n\n const logsById = useMemo(() => new Map(logs.map((item) => [item.id, item])), [logs]);\n const selectedLogsSet = useMemo(() => new Set(selectedLogs), [selectedLogs]);\n const selectedBadgesSet = useMemo(() => new Set(selectedBadges), [selectedBadges]);\n\n const selectLog = useCallback((id: string) => {\n setSelectedLogs((currentLogs) => {\n if (currentLogs.includes(id)) {\n return currentLogs;\n }\n\n return [...currentLogs, id];\n });\n }, []);\n\n const removeSelectedLog = useCallback((id: string) => {\n setSelectedLogs((currentLogs) => currentLogs.filter((item) => item !== id));\n }, []);\n\n const clearSelectedLogs = useCallback(() => {\n setSelectedLogs([]);\n }, []);\n\n const toggleBadge = useCallback((tag: string) => {\n setSelectedBadges((currentBadges) => {\n if (currentBadges.includes(tag)) {\n return currentBadges.filter((item) => item !== tag);\n }\n\n return [...currentBadges, tag];\n });\n }, []);\n\n const clearSelectedBadges = useCallback(() => {\n setSelectedBadges([]);\n }, []);\n\n const createOnAction = useCallback(\n (id: string) => {\n return (action: DropdownMenuConfigItem) => {\n switch (action.id) {\n case \"select\":\n selectLog(id);\n setEditingId(null);\n break;\n case \"edit\": {\n const target = logsById.get(id);\n if (!target) {\n return;\n }\n setEditingId(id);\n setMessage(target.message);\n setImageUrl(target.imageUrl ?? null);\n setSelectedBadges(target.tags);\n setEditMessage(target.message);\n clearSelectedLogs();\n break;\n }\n\n case \"delete\": {\n onDelete?.([id]);\n removeSelectedLog(id);\n break;\n }\n\n default:\n break;\n }\n };\n },\n [\n logsById,\n clearSelectedLogs,\n onDelete,\n removeSelectedLog,\n selectLog,\n setSelectedBadges,\n ],\n );\n\n const handleOnChangeMessage = useCallback((e: ChangeEvent<HTMLTextAreaElement>) => {\n const value = e.target.value;\n setMessage(value);\n }, []);\n\n const onClear = useCallback(() => {\n setImageUrl(null);\n clearSelectedLogs();\n clearSelectedBadges();\n setMessage(\"\");\n setEditMessage(\"\");\n setEditingId(null);\n }, [clearSelectedBadges, clearSelectedLogs]);\n\n const handleDelete = useCallback(() => {\n onDelete?.(selectedLogs);\n onClear();\n }, [onDelete, onClear, selectedLogs]);\n\n // TODO: поправить при связи с бэком\n const handleCreate = (trimmedMessage: string) => {\n const createdItem: ApprovalLogItem = {\n userName: \"ОГ\",\n message: trimmedMessage,\n imageUrl: imageUrl ?? undefined,\n tags: selectedBadges.length > 0 ? selectedBadges : [],\n rowState: \"default\",\n };\n\n onCreate?.(createdItem);\n onClear();\n };\n\n const handleEdit = (trimmedMessage: string) => {\n if (!editingId) {\n return;\n }\n\n const target = logsById.get(editingId);\n if (!target) {\n return;\n }\n\n const updatedItem: ApprovalLogItem = {\n ...target,\n message: trimmedMessage,\n imageUrl: imageUrl ?? undefined,\n tags: selectedBadges.length > 0 ? selectedBadges : target.tags,\n };\n\n onEdit?.(updatedItem);\n onClear();\n };\n\n const handleOpenFilePicker = () => {\n fileInputRef.current?.click();\n };\n\n const handleFileChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file?.type.startsWith(\"image/\")) {\n return;\n }\n\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result;\n if (typeof result === \"string\") {\n setImageUrl(result);\n }\n };\n reader.readAsDataURL(file);\n\n e.target.value = \"\";\n }, []);\n\n const handleRemoveImage = useCallback(() => {\n setImageUrl(null);\n }, []);\n\n const handleSubmitMessage = () => {\n const trimmed = message.trim();\n if (!trimmed && !imageUrl) {\n return;\n }\n\n if (editingId) {\n handleEdit(trimmed);\n return;\n }\n\n handleCreate(trimmed);\n };\n\n return (\n <div\n className={cn(\"bg-primary-bg flex h-full w-full flex-col rounded-xl\", className)}\n >\n <div className=\"border-delicate-border border-b px-18 py-2.5\">\n <Typography\n variant=\"body-lg-medium\"\n className=\"text-primary-text\"\n >\n Журнал согласования\n </Typography>\n </div>\n\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n {logs.length > 0 ? (\n logs.map((item) => {\n return (\n <ConfigurableDropdownMenu\n key={item.id}\n items={NOTE_ACTIONS}\n onAction={createOnAction(item.id as string)}\n contentProps={{\n align: \"end\",\n side: \"bottom\",\n sideOffset: -72,\n }}\n trigger={\n <div\n className={cn(\n `flex cursor-pointer flex-col gap-2.5 px-4 py-3\n shadow-[0_-2px_4px_0_rgba(0,0,0,0.05)]`,\n selectedLogsSet.has(item.id as string) && \"bg-negotiation-bg\",\n editingId === item.id && \"bg-[rgba(137,204,22,0.1)]\",\n )}\n >\n <div className=\"flex gap-3\">\n <div className=\"w-fit\">\n <BasicAvatar\n initials={{\n text: item.userName,\n className: \"text-primary-text\",\n }}\n avatar={{\n className: \"h-12 w-12\",\n }}\n showDeleteOnHover={false}\n />\n\n <Typography\n variant=\"body-xxs-medium\"\n className=\"text-secondary-text text-center\"\n >\n {item.dateShort}\n </Typography>\n </div>\n\n <div className=\"flex w-full flex-col gap-2.5\">\n <div className=\"flex w-full items-center justify-between\">\n <Typography\n variant=\"body-md-medium\"\n className=\"text-primary-text\"\n >\n {item.userName}\n </Typography>\n\n <Icon\n type=\"check-circle\"\n className=\"text-sub-label-text\"\n />\n </div>\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-primary-text\"\n >\n {item.message}\n </Typography>\n {item.imageUrl && (\n <img\n src={item.imageUrl}\n alt=\"Вложенное изображение\"\n className=\"max-h-65 w-full rounded-lg object-contain\"\n />\n )}\n </div>\n </div>\n <div className=\"flex gap-3 px-4\">\n {item.tags.map((tag) => {\n const badge = getBadge(tag);\n return (\n <div\n key={tag}\n className={cn(\n \"flex items-center gap-1.25 rounded-lg border px-3 py-1\",\n badge.bg,\n badge.color,\n )}\n >\n <Typography variant=\"body-xxs-medium\">{tag}</Typography>\n\n <Icon\n type=\"check-circle\"\n size={15}\n strokeWidth={1.25}\n />\n </div>\n );\n })}\n </div>\n </div>\n }\n />\n );\n })\n ) : (\n <div\n className=\"flex h-full flex-col items-center justify-center gap-4 px-4\n text-center\"\n >\n <img\n src={notFoundImg}\n alt=\"not-found\"\n />\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-secondary-text\"\n >\n Место для важных заметок по продвижению заявки. Любые комментарии, скриншоты\n и все, что может помочь Вам освободить голову.\n </Typography>\n </div>\n )}\n </div>\n\n <div className=\"mt-auto shrink-0\">\n {selectedLogs.length > 0 ? (\n <div\n className=\"bg-secondary-bg border-delicate-border flex items-center\n justify-between rounded-b-xl border-t px-2 py-3\"\n >\n <Button\n variant=\"circleGhost\"\n onClick={onClear}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-secondary-text\"\n size={25}\n strokeWidth={1.5}\n />\n </Button>\n\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-secondary-text\"\n >\n Удалить {selectedLogs.length} {getNotesWord(selectedLogs.length)}...\n </Typography>\n\n <Button\n variant=\"circleGhost\"\n onClick={handleDelete}\n >\n <Icon\n type=\"trash\"\n className=\"text-error-text\"\n size={25}\n strokeWidth={1.5}\n />\n </Button>\n </div>\n ) : (\n <div>\n <div className=\"border-delicate-border flex justify-center gap-1 border-t p-2\">\n {BADGES.map((tag) => {\n const badge = getBadge(tag);\n return (\n <div\n key={tag}\n onClick={() => toggleBadge(tag)}\n className={cn(\n `flex w-full cursor-pointer items-center gap-1.25 rounded-lg border\n px-3 py-1`,\n badge.bg,\n badge.color,\n selectedBadgesSet.has(tag)\n ? \"border-current\"\n : \"border-transparent\",\n )}\n >\n <Typography\n variant=\"body-xxs-medium\"\n className=\"w-full text-center\"\n >\n {tag}\n </Typography>\n </div>\n );\n })}\n </div>\n\n <div\n className=\"border-delicate-border bg-secondary-bg rounded-b-xl border-t px-2\n py-3\"\n >\n {editingId && (\n <div className=\"flex justify-between\">\n <Button variant=\"circleGhost\">\n <Icon\n type=\"pencil\"\n className=\"text-secondary-text\"\n size={20}\n strokeWidth={1.5}\n />\n </Button>\n <div className=\"border-inp-default-border w-full border-l-2 pl-3\">\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-sub-label-text line-clamp-2\"\n >\n {editMessage}\n </Typography>\n </div>\n\n <Button\n variant=\"circleGhost\"\n onClick={onClear}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-secondary-text\"\n size={25}\n strokeWidth={1.5}\n />\n </Button>\n </div>\n )}\n\n <div className=\"flex items-center\">\n <input\n type=\"file\"\n accept=\"image/*\"\n ref={fileInputRef}\n className=\"hidden\"\n onChange={handleFileChange}\n />\n <Button\n variant=\"circleGhost\"\n onClick={handleOpenFilePicker}\n >\n <Icon\n type=\"plus\"\n className=\"text-secondary-text\"\n />\n </Button>\n <TextareaField\n rows={message.length < 20 ? 1 : 2}\n placeholder={\n editingId ? \"Редактирование заметки...\" : \"Напишите заметку...\"\n }\n value={message}\n onChange={handleOnChangeMessage}\n className=\"border-0! text-left placeholder:text-center\"\n />\n <Button\n variant=\"circleGhost\"\n onClick={handleSubmitMessage}\n >\n <Icon\n type=\"telegram-logo\"\n className=\"text-secondary-text\"\n />\n </Button>\n </div>\n {imageUrl && (\n <div className=\"bg-secondary-bg mt-2.5 flex items-start gap-2\">\n <img\n src={imageUrl}\n alt=\"Предпросмотр изображения\"\n className=\"max-h-50 w-full max-w-80 rounded-lg object-contain\"\n />\n <Button\n variant=\"circleGhost\"\n onClick={handleRemoveImage}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-secondary-text\"\n />\n </Button>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n"],"names":["notFoundImg","BADGES","NOTE_ACTIONS","getBadge","type","getNotesWord","count","mod10","mod100","ApprovalLog","logs","className","onDelete","onCreate","onEdit","message","setMessage","useState","imageUrl","setImageUrl","editMessage","setEditMessage","editingId","setEditingId","selectedLogs","setSelectedLogs","selectedBadges","setSelectedBadges","fileInputRef","useRef","logsById","useMemo","item","selectedLogsSet","selectedBadgesSet","selectLog","useCallback","id","currentLogs","removeSelectedLog","clearSelectedLogs","toggleBadge","tag","currentBadges","clearSelectedBadges","createOnAction","action","target","handleOnChangeMessage","value","onClear","handleDelete","handleCreate","trimmedMessage","createdItem","handleEdit","updatedItem","handleOpenFilePicker","handleFileChange","file","reader","result","handleRemoveImage","handleSubmitMessage","trimmed","jsxs","cn","jsx","Typography","ConfigurableDropdownMenu","BasicAvatar","Icon","badge","Button","TextareaField"],"mappings":"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"}
|