@omnifyjp/ui 0.5.1 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-DTM76EJD.js → chunk-2GN4WIOV.js} +14 -9
- package/dist/chunk-2GN4WIOV.js.map +1 -0
- package/dist/chunk-735JNJJO.js +27 -0
- package/dist/chunk-735JNJJO.js.map +1 -0
- package/dist/{chunk-2ZIFL2X3.js → chunk-FVOQZTHE.js} +10 -8
- package/dist/chunk-FVOQZTHE.js.map +1 -0
- package/dist/{chunk-SHHZRZMM.js → chunk-ITXOZ4IR.js} +5 -3
- package/dist/chunk-ITXOZ4IR.js.map +1 -0
- package/dist/chunk-NVPNMQSR.js +30 -0
- package/dist/chunk-NVPNMQSR.js.map +1 -0
- package/dist/{chunk-X57K24P3.js → chunk-O2ADW2GC.js} +4 -4
- package/dist/{chunk-X57K24P3.js.map → chunk-O2ADW2GC.js.map} +1 -1
- package/dist/{chunk-RSCXIS4D.js → chunk-UASABUQA.js} +10 -8
- package/dist/chunk-UASABUQA.js.map +1 -0
- package/dist/{chunk-5D3OAVOZ.js → chunk-UR2QLIS2.js} +5 -3
- package/dist/chunk-UR2QLIS2.js.map +1 -0
- package/dist/components/AppShell.js +8 -6
- package/dist/components/Header.js +6 -3
- package/dist/components/LanguageSelector.d.ts +11 -0
- package/dist/components/LanguageSelector.js +5 -0
- package/dist/components/LanguageSelector.js.map +1 -0
- package/dist/components/OrganizationSelector.js +2 -2
- package/dist/components/OrganizationSetupModal.js +2 -2
- package/dist/components/Sidebar.js +3 -3
- package/dist/contexts/LanguageContext.d.ts +17 -0
- package/dist/contexts/LanguageContext.js +4 -0
- package/dist/contexts/LanguageContext.js.map +1 -0
- package/dist/contexts/OrganizationContext.d.ts +3 -1
- package/dist/contexts/OrganizationContext.js +1 -1
- package/dist/hooks/use-mobile.d.ts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +8 -6
- package/dist/types.d.ts +3 -1
- package/package.json +9 -9
- package/src/styles/index.css +1 -0
- package/dist/chunk-2ZIFL2X3.js.map +0 -1
- package/dist/chunk-5D3OAVOZ.js.map +0 -1
- package/dist/chunk-DTM76EJD.js.map +0 -1
- package/dist/chunk-RSCXIS4D.js.map +0 -1
- package/dist/chunk-SHHZRZMM.js.map +0 -1
- package/dist/components/accordion.d.ts +0 -70
- package/dist/components/accordion.js +0 -3
- package/dist/components/accordion.js.map +0 -1
- package/dist/components/alert-dialog.d.ts +0 -1
- package/dist/components/alert-dialog.js +0 -3
- package/dist/components/alert-dialog.js.map +0 -1
- package/dist/components/alert.d.ts +0 -1
- package/dist/components/alert.js +0 -3
- package/dist/components/alert.js.map +0 -1
- package/dist/components/aspect-ratio.d.ts +0 -1
- package/dist/components/aspect-ratio.js +0 -3
- package/dist/components/aspect-ratio.js.map +0 -1
- package/dist/components/avatar.d.ts +0 -1
- package/dist/components/avatar.js +0 -3
- package/dist/components/avatar.js.map +0 -1
- package/dist/components/badge.d.ts +0 -1
- package/dist/components/badge.js +0 -3
- package/dist/components/badge.js.map +0 -1
- package/dist/components/breadcrumb.d.ts +0 -1
- package/dist/components/breadcrumb.js +0 -3
- package/dist/components/breadcrumb.js.map +0 -1
- package/dist/components/button.d.ts +0 -1
- package/dist/components/button.js +0 -3
- package/dist/components/button.js.map +0 -1
- package/dist/components/calendar-category-badge.d.ts +0 -1
- package/dist/components/calendar-category-badge.js +0 -3
- package/dist/components/calendar-category-badge.js.map +0 -1
- package/dist/components/calendar-event-chip.d.ts +0 -1
- package/dist/components/calendar-event-chip.js +0 -3
- package/dist/components/calendar-event-chip.js.map +0 -1
- package/dist/components/calendar-event-sheet.d.ts +0 -1
- package/dist/components/calendar-event-sheet.js +0 -3
- package/dist/components/calendar-event-sheet.js.map +0 -1
- package/dist/components/calendar-mini.d.ts +0 -1
- package/dist/components/calendar-mini.js +0 -3
- package/dist/components/calendar-mini.js.map +0 -1
- package/dist/components/calendar-toolbar.d.ts +0 -1
- package/dist/components/calendar-toolbar.js +0 -3
- package/dist/components/calendar-toolbar.js.map +0 -1
- package/dist/components/calendar.d.ts +0 -1
- package/dist/components/calendar.js +0 -3
- package/dist/components/calendar.js.map +0 -1
- package/dist/components/card.d.ts +0 -1
- package/dist/components/card.js +0 -3
- package/dist/components/card.js.map +0 -1
- package/dist/components/carousel.d.ts +0 -1
- package/dist/components/carousel.js +0 -3
- package/dist/components/carousel.js.map +0 -1
- package/dist/components/chart.d.ts +0 -1
- package/dist/components/chart.js +0 -3
- package/dist/components/chart.js.map +0 -1
- package/dist/components/checkbox.d.ts +0 -1
- package/dist/components/checkbox.js +0 -3
- package/dist/components/checkbox.js.map +0 -1
- package/dist/components/collapsible.d.ts +0 -1
- package/dist/components/collapsible.js +0 -3
- package/dist/components/collapsible.js.map +0 -1
- package/dist/components/color-picker.d.ts +0 -1
- package/dist/components/color-picker.js +0 -3
- package/dist/components/color-picker.js.map +0 -1
- package/dist/components/combobox.d.ts +0 -1
- package/dist/components/combobox.js +0 -3
- package/dist/components/combobox.js.map +0 -1
- package/dist/components/command.d.ts +0 -1
- package/dist/components/command.js +0 -3
- package/dist/components/command.js.map +0 -1
- package/dist/components/context-menu.d.ts +0 -1
- package/dist/components/context-menu.js +0 -3
- package/dist/components/context-menu.js.map +0 -1
- package/dist/components/date-picker.d.ts +0 -1
- package/dist/components/date-picker.js +0 -3
- package/dist/components/date-picker.js.map +0 -1
- package/dist/components/dialog.d.ts +0 -1
- package/dist/components/dialog.js +0 -3
- package/dist/components/dialog.js.map +0 -1
- package/dist/components/drawer.d.ts +0 -1
- package/dist/components/drawer.js +0 -3
- package/dist/components/drawer.js.map +0 -1
- package/dist/components/dropdown-menu.d.ts +0 -1
- package/dist/components/dropdown-menu.js +0 -3
- package/dist/components/dropdown-menu.js.map +0 -1
- package/dist/components/file-upload.d.ts +0 -1
- package/dist/components/file-upload.js +0 -3
- package/dist/components/file-upload.js.map +0 -1
- package/dist/components/form.d.ts +0 -1
- package/dist/components/form.js +0 -3
- package/dist/components/form.js.map +0 -1
- package/dist/components/hover-card.d.ts +0 -1
- package/dist/components/hover-card.js +0 -3
- package/dist/components/hover-card.js.map +0 -1
- package/dist/components/input-otp.d.ts +0 -1
- package/dist/components/input-otp.js +0 -3
- package/dist/components/input-otp.js.map +0 -1
- package/dist/components/input.d.ts +0 -1
- package/dist/components/input.js +0 -3
- package/dist/components/input.js.map +0 -1
- package/dist/components/label.d.ts +0 -1
- package/dist/components/label.js +0 -3
- package/dist/components/label.js.map +0 -1
- package/dist/components/menubar.d.ts +0 -1
- package/dist/components/menubar.js +0 -3
- package/dist/components/menubar.js.map +0 -1
- package/dist/components/navigation-menu.d.ts +0 -1
- package/dist/components/navigation-menu.js +0 -3
- package/dist/components/navigation-menu.js.map +0 -1
- package/dist/components/pagination.d.ts +0 -1
- package/dist/components/pagination.js +0 -3
- package/dist/components/pagination.js.map +0 -1
- package/dist/components/password-input.d.ts +0 -1
- package/dist/components/password-input.js +0 -3
- package/dist/components/password-input.js.map +0 -1
- package/dist/components/permission-grid.d.ts +0 -1
- package/dist/components/permission-grid.js +0 -3
- package/dist/components/permission-grid.js.map +0 -1
- package/dist/components/popover.d.ts +0 -1
- package/dist/components/popover.js +0 -3
- package/dist/components/popover.js.map +0 -1
- package/dist/components/progress.d.ts +0 -1
- package/dist/components/progress.js +0 -3
- package/dist/components/progress.js.map +0 -1
- package/dist/components/radio-group.d.ts +0 -1
- package/dist/components/radio-group.js +0 -3
- package/dist/components/radio-group.js.map +0 -1
- package/dist/components/rating.d.ts +0 -1
- package/dist/components/rating.js +0 -3
- package/dist/components/rating.js.map +0 -1
- package/dist/components/resizable.d.ts +0 -1
- package/dist/components/resizable.js +0 -3
- package/dist/components/resizable.js.map +0 -1
- package/dist/components/scope-tree.d.ts +0 -1
- package/dist/components/scope-tree.js +0 -3
- package/dist/components/scope-tree.js.map +0 -1
- package/dist/components/scope-type-badge.d.ts +0 -1
- package/dist/components/scope-type-badge.js +0 -3
- package/dist/components/scope-type-badge.js.map +0 -1
- package/dist/components/scroll-area.d.ts +0 -1
- package/dist/components/scroll-area.js +0 -3
- package/dist/components/scroll-area.js.map +0 -1
- package/dist/components/select.d.ts +0 -1
- package/dist/components/select.js +0 -3
- package/dist/components/select.js.map +0 -1
- package/dist/components/separator.d.ts +0 -1
- package/dist/components/separator.js +0 -3
- package/dist/components/separator.js.map +0 -1
- package/dist/components/sheet.d.ts +0 -1
- package/dist/components/sheet.js +0 -3
- package/dist/components/sheet.js.map +0 -1
- package/dist/components/skeleton.d.ts +0 -1
- package/dist/components/skeleton.js +0 -3
- package/dist/components/skeleton.js.map +0 -1
- package/dist/components/slider.d.ts +0 -1
- package/dist/components/slider.js +0 -3
- package/dist/components/slider.js.map +0 -1
- package/dist/components/slug-input.d.ts +0 -1
- package/dist/components/slug-input.js +0 -3
- package/dist/components/slug-input.js.map +0 -1
- package/dist/components/sonner.d.ts +0 -1
- package/dist/components/sonner.js +0 -3
- package/dist/components/sonner.js.map +0 -1
- package/dist/components/stage-type-badge.d.ts +0 -1
- package/dist/components/stage-type-badge.js +0 -3
- package/dist/components/stage-type-badge.js.map +0 -1
- package/dist/components/switch.d.ts +0 -1
- package/dist/components/switch.js +0 -3
- package/dist/components/switch.js.map +0 -1
- package/dist/components/table.d.ts +0 -1
- package/dist/components/table.js +0 -3
- package/dist/components/table.js.map +0 -1
- package/dist/components/tabs.d.ts +0 -1
- package/dist/components/tabs.js +0 -3
- package/dist/components/tabs.js.map +0 -1
- package/dist/components/tag-input.d.ts +0 -1
- package/dist/components/tag-input.js +0 -3
- package/dist/components/tag-input.js.map +0 -1
- package/dist/components/textarea.d.ts +0 -1
- package/dist/components/textarea.js +0 -3
- package/dist/components/textarea.js.map +0 -1
- package/dist/components/time-picker.d.ts +0 -1
- package/dist/components/time-picker.js +0 -3
- package/dist/components/time-picker.js.map +0 -1
- package/dist/components/toggle-group.d.ts +0 -1
- package/dist/components/toggle-group.js +0 -3
- package/dist/components/toggle-group.js.map +0 -1
- package/dist/components/toggle.d.ts +0 -1
- package/dist/components/toggle.js +0 -3
- package/dist/components/toggle.js.map +0 -1
- package/dist/components/tooltip.d.ts +0 -1
- package/dist/components/tooltip.js +0 -3
- package/dist/components/tooltip.js.map +0 -1
- package/dist/components/workflow-category-badge.d.ts +0 -1
- package/dist/components/workflow-category-badge.js +0 -3
- package/dist/components/workflow-category-badge.js.map +0 -1
- package/dist/components/workflow-diagram.d.ts +0 -1
- package/dist/components/workflow-diagram.js +0 -3
- package/dist/components/workflow-diagram.js.map +0 -1
- package/dist/components/workflow-status-badge.d.ts +0 -1
- package/dist/components/workflow-status-badge.js +0 -3
- package/dist/components/workflow-status-badge.js.map +0 -1
- package/dist/components/workflow-stepper.d.ts +0 -1
- package/dist/components/workflow-stepper.js +0 -3
- package/dist/components/workflow-stepper.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useOrganization } from './chunk-
|
|
1
|
+
import { useOrganization } from './chunk-ITXOZ4IR.js';
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import { useTranslation } from 'react-i18next';
|
|
4
4
|
import { Button } from '@omnifyjp/ui-components/components/button';
|
|
@@ -14,7 +14,8 @@ function OrganizationSelector({ variant = "header" }) {
|
|
|
14
14
|
selectedBranch,
|
|
15
15
|
setSelectedOrganization,
|
|
16
16
|
setSelectedBranch,
|
|
17
|
-
getBranchesByOrg
|
|
17
|
+
getBranchesByOrg,
|
|
18
|
+
requireBranch
|
|
18
19
|
} = useOrganization();
|
|
19
20
|
const { t } = useTranslation("shell");
|
|
20
21
|
const [showChangeModal, setShowChangeModal] = useState(false);
|
|
@@ -33,6 +34,10 @@ function OrganizationSelector({ variant = "header" }) {
|
|
|
33
34
|
const org = organizations.find((o) => o.id === tempOrgId);
|
|
34
35
|
if (org) {
|
|
35
36
|
setSelectedOrganization(org);
|
|
37
|
+
if (!requireBranch) {
|
|
38
|
+
setShowChangeModal(false);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
36
41
|
setStep("branch");
|
|
37
42
|
setTempBranchId("");
|
|
38
43
|
setBranchSearch("");
|
|
@@ -67,7 +72,7 @@ function OrganizationSelector({ variant = "header" }) {
|
|
|
67
72
|
),
|
|
68
73
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 min-w-0", children: [
|
|
69
74
|
/* @__PURE__ */ jsx("span", { className: "text-sm font-medium truncate max-w-[120px]", children: selectedOrganization?.name || t("org.noOrgSelected") }),
|
|
70
|
-
selectedBranch && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
75
|
+
requireBranch && selectedBranch && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
71
76
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "/" }),
|
|
72
77
|
/* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground truncate max-w-[100px]", children: selectedBranch.name })
|
|
73
78
|
] })
|
|
@@ -92,7 +97,7 @@ function OrganizationSelector({ variant = "header" }) {
|
|
|
92
97
|
),
|
|
93
98
|
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
94
99
|
/* @__PURE__ */ jsx("div", { className: "font-semibold text-sm truncate", children: selectedOrganization?.name || t("org.noOrgSelected") }),
|
|
95
|
-
/* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground truncate mt-0.5", children: selectedBranch?.name || t("org.noBranchSelected") })
|
|
100
|
+
requireBranch && /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground truncate mt-0.5", children: selectedBranch?.name || t("org.noBranchSelected") })
|
|
96
101
|
] })
|
|
97
102
|
] }),
|
|
98
103
|
/* @__PURE__ */ jsx(ArrowLeftRight, { className: "w-3.5 h-3.5 text-muted-foreground flex-shrink-0" })
|
|
@@ -105,7 +110,7 @@ function OrganizationSelector({ variant = "header" }) {
|
|
|
105
110
|
/* @__PURE__ */ jsx(DialogDescription, { className: "text-sm", children: step === "organization" ? t("org.selectOrgDesc") : t("org.selectBranchDesc") })
|
|
106
111
|
] }),
|
|
107
112
|
/* @__PURE__ */ jsxs("div", { className: "mt-4", children: [
|
|
108
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-6", children: [
|
|
113
|
+
requireBranch && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-6", children: [
|
|
109
114
|
/* @__PURE__ */ jsxs("div", { className: `flex items-center gap-2 px-3 py-1.5 rounded-md text-sm font-medium ${step === "organization" ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"}`, children: [
|
|
110
115
|
/* @__PURE__ */ jsx(Building2, { className: "w-4 h-4" }),
|
|
111
116
|
t("org.orgStep")
|
|
@@ -134,7 +139,7 @@ function OrganizationSelector({ variant = "header" }) {
|
|
|
134
139
|
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
135
140
|
/* @__PURE__ */ jsx("div", { className: "font-semibold text-base", children: org.name }),
|
|
136
141
|
org.description && /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: org.description }),
|
|
137
|
-
/* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground mt-1", children: t("org.branchCount", { count: getBranchesByOrg(org.id).length }) })
|
|
142
|
+
requireBranch && /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground mt-1", children: t("org.branchCount", { count: getBranchesByOrg(org.id).length }) })
|
|
138
143
|
] }),
|
|
139
144
|
tempOrgId === org.id && /* @__PURE__ */ jsx("div", { className: "flex-shrink-0 w-6 h-6 rounded-full bg-primary flex items-center justify-center", children: /* @__PURE__ */ jsx(Check, { className: "w-4 h-4 text-white" }) })
|
|
140
145
|
]
|
|
@@ -149,7 +154,7 @@ function OrganizationSelector({ variant = "header" }) {
|
|
|
149
154
|
size: "lg",
|
|
150
155
|
className: "gap-2",
|
|
151
156
|
children: [
|
|
152
|
-
t("common.next"),
|
|
157
|
+
requireBranch ? t("common.next") : t("common.complete"),
|
|
153
158
|
/* @__PURE__ */ jsx(ArrowRight, { className: "w-4 h-4" })
|
|
154
159
|
]
|
|
155
160
|
}
|
|
@@ -231,5 +236,5 @@ function OrganizationSelector({ variant = "header" }) {
|
|
|
231
236
|
}
|
|
232
237
|
|
|
233
238
|
export { OrganizationSelector };
|
|
234
|
-
//# sourceMappingURL=chunk-
|
|
235
|
-
//# sourceMappingURL=chunk-
|
|
239
|
+
//# sourceMappingURL=chunk-2GN4WIOV.js.map
|
|
240
|
+
//# sourceMappingURL=chunk-2GN4WIOV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/OrganizationSelector.tsx"],"names":[],"mappings":"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","file":"chunk-2GN4WIOV.js","sourcesContent":["import { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useOrganization } from '../contexts/OrganizationContext';\nimport { Button } from '@omnifyjp/ui-components/components/button';\nimport { Input } from '@omnifyjp/ui-components/components/input';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@omnifyjp/ui-components/components/dialog';\nimport { Building2, ArrowLeftRight, Check, Search, MapPin, ArrowRight } from 'lucide-react';\n\ninterface OrganizationSelectorProps {\n variant?: 'header' | 'sidebar';\n}\n\nexport function OrganizationSelector({ variant = 'header' }: OrganizationSelectorProps) {\n const {\n organizations,\n selectedOrganization,\n selectedBranch,\n setSelectedOrganization,\n setSelectedBranch,\n getBranchesByOrg,\n requireBranch,\n } = useOrganization();\n\n const { t } = useTranslation('shell');\n\n const [showChangeModal, setShowChangeModal] = useState(false);\n const [step, setStep] = useState<'organization' | 'branch'>('organization');\n const [tempOrgId, setTempOrgId] = useState<string>('');\n const [tempBranchId, setTempBranchId] = useState<string>('');\n const [branchSearch, setBranchSearch] = useState('');\n\n const handleOpenChange = () => {\n setShowChangeModal(true);\n setStep('organization');\n setTempOrgId(selectedOrganization?.id || '');\n setTempBranchId('');\n setBranchSearch('');\n };\n\n const handleOrganizationNext = () => {\n const org = organizations.find(o => o.id === tempOrgId);\n if (org) {\n setSelectedOrganization(org);\n if (!requireBranch) {\n setShowChangeModal(false);\n return;\n }\n setStep('branch');\n setTempBranchId('');\n setBranchSearch('');\n }\n };\n\n const handleBranchComplete = () => {\n const branch = getBranchesByOrg(selectedOrganization!.id).find(b => b.id === tempBranchId);\n if (branch) {\n setSelectedBranch(branch);\n setShowChangeModal(false);\n }\n };\n\n const availableBranches = selectedOrganization ? getBranchesByOrg(selectedOrganization.id) : [];\n const filteredBranches = availableBranches.filter((b) =>\n b.name.toLowerCase().includes(branchSearch.toLowerCase()) ||\n b.location?.toLowerCase().includes(branchSearch.toLowerCase())\n );\n\n return (\n <>\n {variant === 'header' ? (\n <Button\n variant=\"outline\"\n onClick={handleOpenChange}\n className=\"gap-2 px-3\"\n >\n {selectedOrganization && (\n <div\n className=\"w-5 h-5 rounded flex items-center justify-center text-white font-bold text-[10px] flex-shrink-0\"\n style={{ backgroundColor: selectedOrganization.color }}\n >\n {selectedOrganization.shortName}\n </div>\n )}\n <div className=\"flex items-center gap-1.5 min-w-0\">\n <span className=\"text-sm font-medium truncate max-w-[120px]\">\n {selectedOrganization?.name || t('org.noOrgSelected')}\n </span>\n {requireBranch && selectedBranch && (\n <>\n <span className=\"text-muted-foreground\">/</span>\n <span className=\"text-sm text-muted-foreground truncate max-w-[100px]\">\n {selectedBranch.name}\n </span>\n </>\n )}\n </div>\n <ArrowLeftRight className=\"w-3.5 h-3.5 text-muted-foreground flex-shrink-0\" />\n </Button>\n ) : (\n <div\n className=\"flex items-center justify-between gap-2 cursor-pointer hover:bg-sidebar-accent transition-colors rounded-md px-4 py-3\"\n onClick={handleOpenChange}\n >\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n {selectedOrganization && (\n <div\n className=\"w-8 h-8 rounded-lg flex items-center justify-center text-white font-bold text-xs flex-shrink-0\"\n style={{ backgroundColor: selectedOrganization.color }}\n >\n {selectedOrganization.shortName}\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-semibold text-sm truncate\">\n {selectedOrganization?.name || t('org.noOrgSelected')}\n </div>\n {requireBranch && (\n <div className=\"text-xs text-muted-foreground truncate mt-0.5\">\n {selectedBranch?.name || t('org.noBranchSelected')}\n </div>\n )}\n </div>\n </div>\n <ArrowLeftRight className=\"w-3.5 h-3.5 text-muted-foreground flex-shrink-0\" />\n </div>\n )}\n\n <Dialog open={showChangeModal} onOpenChange={setShowChangeModal}>\n <DialogContent className=\"sm:max-w-[520px]\">\n <DialogHeader>\n <DialogTitle className=\"text-xl font-semibold\">\n {step === 'organization' ? t('org.selectOrg') : t('org.selectBranch')}\n </DialogTitle>\n <DialogDescription className=\"text-sm\">\n {step === 'organization'\n ? t('org.selectOrgDesc')\n : t('org.selectBranchDesc')}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"mt-4\">\n {requireBranch && (\n <div className=\"flex items-center gap-2 mb-6\">\n <div className={`flex items-center gap-2 px-3 py-1.5 rounded-md text-sm font-medium ${\n step === 'organization' ? 'bg-primary/10 text-primary' : 'bg-muted text-muted-foreground'\n }`}>\n <Building2 className=\"w-4 h-4\" />\n {t('org.orgStep')}\n </div>\n <ArrowRight className=\"w-4 h-4 text-muted-foreground\" />\n <div className={`flex items-center gap-2 px-3 py-1.5 rounded-md text-sm font-medium ${\n step === 'branch' ? 'bg-primary/10 text-primary' : 'bg-muted text-muted-foreground'\n }`}>\n <MapPin className=\"w-4 h-4\" />\n {t('org.branchStep')}\n </div>\n </div>\n )}\n\n {step === 'organization' && (\n <div>\n <div className=\"space-y-2\">\n {organizations.map((org) => (\n <div\n key={org.id}\n className={`relative flex items-center gap-3 rounded-lg border-2 p-4 cursor-pointer transition-all ${\n tempOrgId === org.id\n ? 'border-primary bg-primary/5'\n : 'border-border hover:border-muted-foreground/30 hover:bg-accent'\n }`}\n onClick={() => setTempOrgId(org.id)}\n >\n <div\n className=\"w-10 h-10 rounded-lg flex items-center justify-center text-white font-bold text-sm flex-shrink-0\"\n style={{ backgroundColor: org.color }}\n >\n {org.shortName}\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-semibold text-base\">{org.name}</div>\n {org.description && (\n <div className=\"text-sm text-muted-foreground\">{org.description}</div>\n )}\n {requireBranch && (\n <div className=\"text-xs text-muted-foreground mt-1\">\n {t('org.branchCount', { count: getBranchesByOrg(org.id).length })}\n </div>\n )}\n </div>\n {tempOrgId === org.id && (\n <div className=\"flex-shrink-0 w-6 h-6 rounded-full bg-primary flex items-center justify-center\">\n <Check className=\"w-4 h-4 text-white\" />\n </div>\n )}\n </div>\n ))}\n </div>\n\n <div className=\"mt-6 flex justify-end\">\n <Button\n onClick={handleOrganizationNext}\n disabled={!tempOrgId}\n size=\"lg\"\n className=\"gap-2\"\n >\n {requireBranch ? t('common.next') : t('common.complete')}\n <ArrowRight className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n )}\n\n {step === 'branch' && selectedOrganization && (\n <div>\n <div className=\"mb-4 p-3 bg-muted rounded-lg border border-border\">\n <div className=\"text-xs text-muted-foreground mb-1.5\">{t('org.selectedOrg')}</div>\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-8 h-8 rounded-lg flex items-center justify-center text-white font-bold text-xs\"\n style={{ backgroundColor: selectedOrganization.color }}\n >\n {selectedOrganization.shortName}\n </div>\n <span className=\"font-semibold\">{selectedOrganization.name}</span>\n </div>\n </div>\n\n <div className=\"relative mb-3\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n <Input\n placeholder={t('org.searchBranch')}\n value={branchSearch}\n onChange={(e) => setBranchSearch(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n\n <div className=\"space-y-2 max-h-[280px] overflow-y-auto\">\n {filteredBranches.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n {t('org.noBranchFound')}\n </div>\n ) : (\n filteredBranches.map((branch) => (\n <div\n key={branch.id}\n className={`relative flex items-center gap-3 rounded-lg border-2 p-4 cursor-pointer transition-all ${\n tempBranchId === branch.id\n ? 'border-primary bg-primary/5'\n : 'border-border hover:border-muted-foreground/30 hover:bg-accent'\n }`}\n onClick={() => setTempBranchId(branch.id)}\n >\n <div className=\"w-10 h-10 rounded-lg bg-muted flex items-center justify-center flex-shrink-0\">\n <MapPin className=\"w-5 h-5 text-muted-foreground\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-semibold text-base\">{branch.name}</div>\n {branch.location && (\n <div className=\"text-sm text-muted-foreground\">{branch.location}</div>\n )}\n </div>\n {tempBranchId === branch.id && (\n <div className=\"flex-shrink-0 w-6 h-6 rounded-full bg-primary flex items-center justify-center\">\n <Check className=\"w-4 h-4 text-white\" />\n </div>\n )}\n </div>\n ))\n )}\n </div>\n\n <div className=\"mt-6 flex justify-between\">\n <Button\n variant=\"outline\"\n onClick={() => {\n setStep('organization');\n setTempOrgId(selectedOrganization.id);\n }}\n >\n {t('common.back')}\n </Button>\n <Button\n onClick={handleBranchComplete}\n disabled={!tempBranchId}\n size=\"lg\"\n className=\"gap-2\"\n >\n {t('common.complete')}\n <ArrowRight className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n )}\n </div>\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useLanguage } from './chunk-NVPNMQSR.js';
|
|
2
|
+
import { Globe } from 'lucide-react';
|
|
3
|
+
import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem } from '@omnifyjp/ui-components/components/dropdown-menu';
|
|
4
|
+
import { Button } from '@omnifyjp/ui-components/components/button';
|
|
5
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
function LanguageSelector({ showLabel = true, align = "end" }) {
|
|
8
|
+
const { language, setLanguage, languageNames } = useLanguage();
|
|
9
|
+
return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
10
|
+
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: showLabel ? "default" : "icon", className: "gap-2", children: [
|
|
11
|
+
/* @__PURE__ */ jsx(Globe, { className: "h-4 w-4" }),
|
|
12
|
+
showLabel && /* @__PURE__ */ jsx("span", { className: "text-sm", children: languageNames[language] })
|
|
13
|
+
] }) }),
|
|
14
|
+
/* @__PURE__ */ jsx(DropdownMenuContent, { align, children: /* @__PURE__ */ jsx(
|
|
15
|
+
DropdownMenuRadioGroup,
|
|
16
|
+
{
|
|
17
|
+
value: language,
|
|
18
|
+
onValueChange: (val) => setLanguage(val),
|
|
19
|
+
children: Object.keys(languageNames).map((lang) => /* @__PURE__ */ jsx(DropdownMenuRadioItem, { value: lang, children: languageNames[lang] }, lang))
|
|
20
|
+
}
|
|
21
|
+
) })
|
|
22
|
+
] });
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { LanguageSelector };
|
|
26
|
+
//# sourceMappingURL=chunk-735JNJJO.js.map
|
|
27
|
+
//# sourceMappingURL=chunk-735JNJJO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/LanguageSelector.tsx"],"names":[],"mappings":";;;;;;AAmBA,SAAS,iBAAiB,EAAE,SAAA,GAAY,IAAA,EAAM,KAAA,GAAQ,OAAM,EAA0B;AACpF,EAAA,MAAM,EAAE,QAAA,EAAU,WAAA,EAAa,aAAA,KAAkB,WAAA,EAAY;AAE7D,EAAA,4BACG,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,mBAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EAC1B,QAAA,kBAAA,IAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAM,SAAA,GAAY,SAAA,GAAY,MAAA,EAAQ,SAAA,EAAU,OAAA,EACtE,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,WAAU,SAAA,EAAU,CAAA;AAAA,MAC1B,6BAAa,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,SAAA,EAAW,QAAA,EAAA,aAAA,CAAc,QAAQ,CAAA,EAAE;AAAA,KAAA,EACnE,CAAA,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,uBAAoB,KAAA,EACnB,QAAA,kBAAA,GAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,QAAA;AAAA,QACP,aAAA,EAAe,CAAC,GAAA,KAAQ,WAAA,CAAY,GAAwB,CAAA;AAAA,QAE1D,QAAA,EAAA,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,CAA0B,IAAI,CAAC,IAAA,qBACxD,GAAA,CAAC,qBAAA,EAAA,EAAiC,OAAO,IAAA,EACtC,QAAA,EAAA,aAAA,CAAc,IAAI,CAAA,EAAA,EADO,IAE5B,CACD;AAAA;AAAA,KACH,EACF;AAAA,GAAA,EACF,CAAA;AAEJ","file":"chunk-735JNJJO.js","sourcesContent":["import { Globe } from 'lucide-react';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuTrigger,\n} from '@omnifyjp/ui-components/components/dropdown-menu';\nimport { Button } from '@omnifyjp/ui-components/components/button';\nimport { useLanguage } from '../contexts/LanguageContext';\nimport type { SupportedLanguage } from '../i18n';\n\ninterface LanguageSelectorProps {\n /** Show language name next to the globe icon. Defaults to `true`. */\n showLabel?: boolean;\n /** Alignment of the dropdown. Defaults to `\"end\"`. */\n align?: 'start' | 'center' | 'end';\n}\n\nfunction LanguageSelector({ showLabel = true, align = 'end' }: LanguageSelectorProps) {\n const { language, setLanguage, languageNames } = useLanguage();\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size={showLabel ? 'default' : 'icon'} className=\"gap-2\">\n <Globe className=\"h-4 w-4\" />\n {showLabel && <span className=\"text-sm\">{languageNames[language]}</span>}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align={align}>\n <DropdownMenuRadioGroup\n value={language}\n onValueChange={(val) => setLanguage(val as SupportedLanguage)}\n >\n {(Object.keys(languageNames) as SupportedLanguage[]).map((lang) => (\n <DropdownMenuRadioItem key={lang} value={lang}>\n {languageNames[lang]}\n </DropdownMenuRadioItem>\n ))}\n </DropdownMenuRadioGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport { LanguageSelector };\nexport type { LanguageSelectorProps };\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useOrganization } from './chunk-
|
|
1
|
+
import { useOrganization } from './chunk-ITXOZ4IR.js';
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
3
|
import { useTranslation } from 'react-i18next';
|
|
4
4
|
import { Button } from '@omnifyjp/ui-components/components/button';
|
|
@@ -15,6 +15,7 @@ function OrganizationSetupModal() {
|
|
|
15
15
|
setSelectedOrganization,
|
|
16
16
|
setSelectedBranch,
|
|
17
17
|
getBranchesByOrg,
|
|
18
|
+
requireBranch,
|
|
18
19
|
isSetupComplete
|
|
19
20
|
} = useOrganization();
|
|
20
21
|
const { t } = useTranslation("shell");
|
|
@@ -27,16 +28,17 @@ function OrganizationSetupModal() {
|
|
|
27
28
|
if (!selectedOrganization) {
|
|
28
29
|
setStep("organization");
|
|
29
30
|
setTempOrgId("");
|
|
30
|
-
} else if (!selectedBranch) {
|
|
31
|
+
} else if (requireBranch && !selectedBranch) {
|
|
31
32
|
setStep("branch");
|
|
32
33
|
setTempBranchId("");
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
|
-
}, [isSetupComplete, selectedOrganization, selectedBranch]);
|
|
36
|
+
}, [isSetupComplete, selectedOrganization, selectedBranch, requireBranch]);
|
|
36
37
|
const handleOrganizationNext = () => {
|
|
37
38
|
const org = organizations.find((o) => o.id === tempOrgId);
|
|
38
39
|
if (org) {
|
|
39
40
|
setSelectedOrganization(org);
|
|
41
|
+
if (!requireBranch) return;
|
|
40
42
|
setStep("branch");
|
|
41
43
|
setTempBranchId("");
|
|
42
44
|
setBranchSearch("");
|
|
@@ -59,7 +61,7 @@ function OrganizationSetupModal() {
|
|
|
59
61
|
/* @__PURE__ */ jsx(DialogDescription, { className: "text-sm", children: step === "organization" ? t("org.selectOrgDesc") : t("org.selectBranchDesc") })
|
|
60
62
|
] }),
|
|
61
63
|
/* @__PURE__ */ jsxs("div", { className: "mt-4", children: [
|
|
62
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-6", children: [
|
|
64
|
+
requireBranch && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-6", children: [
|
|
63
65
|
/* @__PURE__ */ jsxs("div", { className: `flex items-center gap-2 px-3 py-1.5 rounded-md text-sm font-medium ${step === "organization" ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"}`, children: [
|
|
64
66
|
/* @__PURE__ */ jsx(Building2, { className: "w-4 h-4" }),
|
|
65
67
|
t("org.orgStep")
|
|
@@ -88,7 +90,7 @@ function OrganizationSetupModal() {
|
|
|
88
90
|
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
89
91
|
/* @__PURE__ */ jsx("div", { className: "font-semibold text-base", children: org.name }),
|
|
90
92
|
org.description && /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: org.description }),
|
|
91
|
-
/* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground mt-1", children: t("org.branchCount", { count: getBranchesByOrg(org.id).length }) })
|
|
93
|
+
requireBranch && /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground mt-1", children: t("org.branchCount", { count: getBranchesByOrg(org.id).length }) })
|
|
92
94
|
] }),
|
|
93
95
|
tempOrgId === org.id && /* @__PURE__ */ jsx("div", { className: "flex-shrink-0 w-6 h-6 rounded-full bg-primary flex items-center justify-center", children: /* @__PURE__ */ jsx(Check, { className: "w-4 h-4 text-white" }) })
|
|
94
96
|
]
|
|
@@ -103,7 +105,7 @@ function OrganizationSetupModal() {
|
|
|
103
105
|
size: "lg",
|
|
104
106
|
className: "gap-2",
|
|
105
107
|
children: [
|
|
106
|
-
t("common.next"),
|
|
108
|
+
requireBranch ? t("common.next") : t("common.complete"),
|
|
107
109
|
/* @__PURE__ */ jsx(ArrowRight, { className: "w-4 h-4" })
|
|
108
110
|
]
|
|
109
111
|
}
|
|
@@ -185,5 +187,5 @@ function OrganizationSetupModal() {
|
|
|
185
187
|
}
|
|
186
188
|
|
|
187
189
|
export { OrganizationSetupModal };
|
|
188
|
-
//# sourceMappingURL=chunk-
|
|
189
|
-
//# sourceMappingURL=chunk-
|
|
190
|
+
//# sourceMappingURL=chunk-FVOQZTHE.js.map
|
|
191
|
+
//# sourceMappingURL=chunk-FVOQZTHE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/OrganizationSetupModal.tsx"],"names":[],"mappings":"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","file":"chunk-FVOQZTHE.js","sourcesContent":["import { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useOrganization } from '../contexts/OrganizationContext';\nimport { Button } from '@omnifyjp/ui-components/components/button';\nimport { Input } from '@omnifyjp/ui-components/components/input';\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@omnifyjp/ui-components/components/dialog';\nimport { Building2, MapPin, ArrowRight, Check, Search } from 'lucide-react';\n\nexport function OrganizationSetupModal() {\n const {\n organizations,\n selectedOrganization,\n selectedBranch,\n setSelectedOrganization,\n setSelectedBranch,\n getBranchesByOrg,\n requireBranch,\n isSetupComplete,\n } = useOrganization();\n\n const { t } = useTranslation('shell');\n\n const [step, setStep] = useState<'organization' | 'branch'>('organization');\n const [tempOrgId, setTempOrgId] = useState<string>('');\n const [tempBranchId, setTempBranchId] = useState<string>('');\n const [branchSearch, setBranchSearch] = useState('');\n\n useEffect(() => {\n if (!isSetupComplete) {\n if (!selectedOrganization) {\n setStep('organization');\n setTempOrgId('');\n } else if (requireBranch && !selectedBranch) {\n setStep('branch');\n setTempBranchId('');\n }\n }\n }, [isSetupComplete, selectedOrganization, selectedBranch, requireBranch]);\n\n const handleOrganizationNext = () => {\n const org = organizations.find(o => o.id === tempOrgId);\n if (org) {\n setSelectedOrganization(org);\n if (!requireBranch) return;\n setStep('branch');\n setTempBranchId('');\n setBranchSearch('');\n }\n };\n\n const handleBranchComplete = () => {\n const branch = getBranchesByOrg(selectedOrganization!.id).find(b => b.id === tempBranchId);\n if (branch) {\n setSelectedBranch(branch);\n }\n };\n\n const availableBranches = selectedOrganization ? getBranchesByOrg(selectedOrganization.id) : [];\n const filteredBranches = availableBranches.filter((b) =>\n b.name.toLowerCase().includes(branchSearch.toLowerCase()) ||\n b.location?.toLowerCase().includes(branchSearch.toLowerCase())\n );\n\n return (\n <Dialog open={!isSetupComplete} onOpenChange={() => {}}>\n <DialogContent className=\"sm:max-w-[520px]\" onInteractOutside={(e) => e.preventDefault()}>\n <DialogHeader>\n <DialogTitle className=\"text-xl font-semibold\">\n {step === 'organization' ? t('org.selectOrg') : t('org.selectBranch')}\n </DialogTitle>\n <DialogDescription className=\"text-sm\">\n {step === 'organization'\n ? t('org.selectOrgDesc')\n : t('org.selectBranchDesc')}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"mt-4\">\n {requireBranch && (\n <div className=\"flex items-center gap-2 mb-6\">\n <div className={`flex items-center gap-2 px-3 py-1.5 rounded-md text-sm font-medium ${\n step === 'organization' ? 'bg-primary/10 text-primary' : 'bg-muted text-muted-foreground'\n }`}>\n <Building2 className=\"w-4 h-4\" />\n {t('org.orgStep')}\n </div>\n <ArrowRight className=\"w-4 h-4 text-muted-foreground\" />\n <div className={`flex items-center gap-2 px-3 py-1.5 rounded-md text-sm font-medium ${\n step === 'branch' ? 'bg-primary/10 text-primary' : 'bg-muted text-muted-foreground'\n }`}>\n <MapPin className=\"w-4 h-4\" />\n {t('org.branchStep')}\n </div>\n </div>\n )}\n\n {step === 'organization' && (\n <div>\n <div className=\"space-y-2\">\n {organizations.map((org) => (\n <div\n key={org.id}\n className={`relative flex items-center gap-3 rounded-lg border-2 p-4 cursor-pointer transition-all ${\n tempOrgId === org.id\n ? 'border-primary bg-primary/5'\n : 'border-border hover:border-muted-foreground/30 hover:bg-accent'\n }`}\n onClick={() => setTempOrgId(org.id)}\n >\n <div\n className=\"w-10 h-10 rounded-lg flex items-center justify-center text-white font-bold text-sm flex-shrink-0\"\n style={{ backgroundColor: org.color }}\n >\n {org.shortName}\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-semibold text-base\">{org.name}</div>\n {org.description && (\n <div className=\"text-sm text-muted-foreground\">{org.description}</div>\n )}\n {requireBranch && (\n <div className=\"text-xs text-muted-foreground mt-1\">\n {t('org.branchCount', { count: getBranchesByOrg(org.id).length })}\n </div>\n )}\n </div>\n {tempOrgId === org.id && (\n <div className=\"flex-shrink-0 w-6 h-6 rounded-full bg-primary flex items-center justify-center\">\n <Check className=\"w-4 h-4 text-white\" />\n </div>\n )}\n </div>\n ))}\n </div>\n\n <div className=\"mt-6 flex justify-end\">\n <Button\n onClick={handleOrganizationNext}\n disabled={!tempOrgId}\n size=\"lg\"\n className=\"gap-2\"\n >\n {requireBranch ? t('common.next') : t('common.complete')}\n <ArrowRight className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n )}\n\n {step === 'branch' && selectedOrganization && (\n <div>\n <div className=\"mb-4 p-3 bg-muted rounded-lg border border-border\">\n <div className=\"text-xs text-muted-foreground mb-1.5\">{t('org.selectedOrg')}</div>\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-8 h-8 rounded-lg flex items-center justify-center text-white font-bold text-xs\"\n style={{ backgroundColor: selectedOrganization.color }}\n >\n {selectedOrganization.shortName}\n </div>\n <span className=\"font-semibold\">{selectedOrganization.name}</span>\n </div>\n </div>\n\n <div className=\"relative mb-3\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n <Input\n placeholder={t('org.searchBranch')}\n value={branchSearch}\n onChange={(e) => setBranchSearch(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n\n <div className=\"space-y-2 max-h-[280px] overflow-y-auto\">\n {filteredBranches.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n {t('org.noBranchFound')}\n </div>\n ) : (\n filteredBranches.map((branch) => (\n <div\n key={branch.id}\n className={`relative flex items-center gap-3 rounded-lg border-2 p-4 cursor-pointer transition-all ${\n tempBranchId === branch.id\n ? 'border-primary bg-primary/5'\n : 'border-border hover:border-muted-foreground/30 hover:bg-accent'\n }`}\n onClick={() => setTempBranchId(branch.id)}\n >\n <div className=\"w-10 h-10 rounded-lg bg-muted flex items-center justify-center flex-shrink-0\">\n <MapPin className=\"w-5 h-5 text-muted-foreground\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-semibold text-base\">{branch.name}</div>\n {branch.location && (\n <div className=\"text-sm text-muted-foreground\">{branch.location}</div>\n )}\n </div>\n {tempBranchId === branch.id && (\n <div className=\"flex-shrink-0 w-6 h-6 rounded-full bg-primary flex items-center justify-center\">\n <Check className=\"w-4 h-4 text-white\" />\n </div>\n )}\n </div>\n ))\n )}\n </div>\n\n <div className=\"mt-6 flex justify-between\">\n <Button\n variant=\"outline\"\n onClick={() => {\n setStep('organization');\n setSelectedOrganization(null);\n setTempOrgId('');\n }}\n >\n {t('common.back')}\n </Button>\n <Button\n onClick={handleBranchComplete}\n disabled={!tempBranchId}\n size=\"lg\"\n className=\"gap-2\"\n >\n {t('common.complete')}\n <ArrowRight className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"]}
|
|
@@ -23,6 +23,7 @@ function OrganizationProvider({
|
|
|
23
23
|
children,
|
|
24
24
|
organizations = [],
|
|
25
25
|
branches = [],
|
|
26
|
+
requireBranch = true,
|
|
26
27
|
onOrganizationChange,
|
|
27
28
|
onBranchChange
|
|
28
29
|
}) {
|
|
@@ -57,7 +58,7 @@ function OrganizationProvider({
|
|
|
57
58
|
const getBranchesByOrg = (orgId) => {
|
|
58
59
|
return branches.filter((b) => b.organizationId === orgId);
|
|
59
60
|
};
|
|
60
|
-
const isSetupComplete = selectedOrganization !== null && selectedBranch !== null;
|
|
61
|
+
const isSetupComplete = requireBranch ? selectedOrganization !== null && selectedBranch !== null : selectedOrganization !== null;
|
|
61
62
|
const value = {
|
|
62
63
|
organizations,
|
|
63
64
|
branches,
|
|
@@ -66,6 +67,7 @@ function OrganizationProvider({
|
|
|
66
67
|
setSelectedOrganization,
|
|
67
68
|
setSelectedBranch,
|
|
68
69
|
getBranchesByOrg,
|
|
70
|
+
requireBranch,
|
|
69
71
|
isSetupComplete
|
|
70
72
|
};
|
|
71
73
|
return /* @__PURE__ */ jsx(OrganizationContext.Provider, { value, children });
|
|
@@ -79,5 +81,5 @@ function useOrganization() {
|
|
|
79
81
|
}
|
|
80
82
|
|
|
81
83
|
export { OrganizationProvider, useOrganization };
|
|
82
|
-
//# sourceMappingURL=chunk-
|
|
83
|
-
//# sourceMappingURL=chunk-
|
|
84
|
+
//# sourceMappingURL=chunk-ITXOZ4IR.js.map
|
|
85
|
+
//# sourceMappingURL=chunk-ITXOZ4IR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/contexts/OrganizationContext.tsx"],"names":[],"mappings":"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","file":"chunk-ITXOZ4IR.js","sourcesContent":["import { createContext, useContext, useState, useEffect, ReactNode } from 'react';\nimport type { Organization, Branch } from '../types';\n\ninterface OrganizationContextType {\n organizations: Organization[];\n branches: Branch[];\n selectedOrganization: Organization | null;\n selectedBranch: Branch | null;\n setSelectedOrganization: (org: Organization | null) => void;\n setSelectedBranch: (branch: Branch | null) => void;\n getBranchesByOrg: (orgId: string) => Branch[];\n requireBranch: boolean;\n isSetupComplete: boolean;\n}\n\nconst OrganizationContext = createContext<OrganizationContextType | undefined>(undefined);\n\ninterface OrganizationProviderProps {\n children: ReactNode;\n organizations?: Organization[];\n branches?: Branch[];\n requireBranch?: boolean;\n onOrganizationChange?: (org: Organization) => void;\n onBranchChange?: (branch: Branch) => void;\n}\n\nfunction loadSavedOrganization(organizations: Organization[]): Organization | null {\n if (typeof window === 'undefined') return null;\n const savedOrgId = localStorage.getItem('selectedOrganizationId');\n if (savedOrgId) {\n return organizations.find(o => o.id === savedOrgId) ?? null;\n }\n return null;\n}\n\nfunction loadSavedBranch(branches: Branch[]): Branch | null {\n if (typeof window === 'undefined') return null;\n const savedBranchId = localStorage.getItem('selectedBranchId');\n if (savedBranchId) {\n return branches.find(b => b.id === savedBranchId) ?? null;\n }\n return null;\n}\n\nexport function OrganizationProvider({\n children,\n organizations = [],\n branches = [],\n requireBranch = true,\n onOrganizationChange,\n onBranchChange,\n}: OrganizationProviderProps) {\n const [selectedOrganization, setSelectedOrganizationState] = useState<Organization | null>(\n () => loadSavedOrganization(organizations)\n );\n const [selectedBranch, setSelectedBranchState] = useState<Branch | null>(\n () => loadSavedBranch(branches)\n );\n\n const setSelectedOrganization = (org: Organization | null) => {\n setSelectedOrganizationState(org);\n if (org) onOrganizationChange?.(org);\n };\n\n const setSelectedBranch = (branch: Branch | null) => {\n setSelectedBranchState(branch);\n if (branch) onBranchChange?.(branch);\n };\n\n useEffect(() => {\n if (selectedOrganization) {\n localStorage.setItem('selectedOrganizationId', selectedOrganization.id);\n } else {\n localStorage.removeItem('selectedOrganizationId');\n }\n }, [selectedOrganization]);\n\n useEffect(() => {\n if (selectedBranch) {\n localStorage.setItem('selectedBranchId', selectedBranch.id);\n } else {\n localStorage.removeItem('selectedBranchId');\n }\n }, [selectedBranch]);\n\n const getBranchesByOrg = (orgId: string) => {\n return branches.filter(b => b.organizationId === orgId);\n };\n\n const isSetupComplete = requireBranch\n ? selectedOrganization !== null && selectedBranch !== null\n : selectedOrganization !== null;\n\n const value: OrganizationContextType = {\n organizations,\n branches,\n selectedOrganization,\n selectedBranch,\n setSelectedOrganization,\n setSelectedBranch,\n getBranchesByOrg,\n requireBranch,\n isSetupComplete,\n };\n\n return (\n <OrganizationContext.Provider value={value}>\n {children}\n </OrganizationContext.Provider>\n );\n}\n\nexport function useOrganization() {\n const context = useContext(OrganizationContext);\n if (context === undefined) {\n throw new Error('useOrganization must be used within an OrganizationProvider');\n }\n return context;\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { changeLanguage } from './chunk-OY3PSPA5.js';
|
|
2
|
+
import { createContext, useCallback, useContext } from 'react';
|
|
3
|
+
import { useTranslation } from 'react-i18next';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var languageNames = {
|
|
7
|
+
vi: "Ti\u1EBFng Vi\u1EC7t",
|
|
8
|
+
en: "English",
|
|
9
|
+
ja: "\u65E5\u672C\u8A9E"
|
|
10
|
+
};
|
|
11
|
+
var LanguageContext = createContext(void 0);
|
|
12
|
+
function LanguageProvider({ children }) {
|
|
13
|
+
const { i18n } = useTranslation();
|
|
14
|
+
const language = i18n.language || "vi";
|
|
15
|
+
const setLanguage = useCallback((lang) => {
|
|
16
|
+
changeLanguage(lang);
|
|
17
|
+
}, []);
|
|
18
|
+
return /* @__PURE__ */ jsx(LanguageContext.Provider, { value: { language, setLanguage, languageNames }, children });
|
|
19
|
+
}
|
|
20
|
+
function useLanguage() {
|
|
21
|
+
const context = useContext(LanguageContext);
|
|
22
|
+
if (context === void 0) {
|
|
23
|
+
throw new Error("useLanguage must be used within a LanguageProvider");
|
|
24
|
+
}
|
|
25
|
+
return context;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { LanguageProvider, languageNames, useLanguage };
|
|
29
|
+
//# sourceMappingURL=chunk-NVPNMQSR.js.map
|
|
30
|
+
//# sourceMappingURL=chunk-NVPNMQSR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/contexts/LanguageContext.tsx"],"names":[],"mappings":";;;;;AAKO,IAAM,aAAA,GAAmD;AAAA,EAC9D,EAAA,EAAI,sBAAA;AAAA,EACJ,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI;AACN;AAQA,IAAM,eAAA,GAAkB,cAA+C,MAAS,CAAA;AAEzE,SAAS,gBAAA,CAAiB,EAAE,QAAA,EAAS,EAA4B;AACtE,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,cAAA,EAAe;AAChC,EAAA,MAAM,QAAA,GAAY,KAAK,QAAA,IAAY,IAAA;AAEnC,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,CAAC,IAAA,KAA4B;AAC3D,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACrB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACE,GAAA,CAAC,eAAA,CAAgB,QAAA,EAAhB,EAAyB,KAAA,EAAO,EAAE,QAAA,EAAU,WAAA,EAAa,aAAA,EAAc,EACrE,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,OAAA,GAAU,WAAW,eAAe,CAAA;AAC1C,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,EACtE;AACA,EAAA,OAAO,OAAA;AACT","file":"chunk-NVPNMQSR.js","sourcesContent":["import { createContext, useContext, useCallback, ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { changeLanguage } from '../i18n';\nimport type { SupportedLanguage } from '../i18n';\n\nexport const languageNames: Record<SupportedLanguage, string> = {\n vi: 'Tiếng Việt',\n en: 'English',\n ja: '日本語',\n};\n\ninterface LanguageContextType {\n language: SupportedLanguage;\n setLanguage: (lang: SupportedLanguage) => void;\n languageNames: Record<SupportedLanguage, string>;\n}\n\nconst LanguageContext = createContext<LanguageContextType | undefined>(undefined);\n\nexport function LanguageProvider({ children }: { children: ReactNode }) {\n const { i18n } = useTranslation();\n const language = (i18n.language || 'vi') as SupportedLanguage;\n\n const setLanguage = useCallback((lang: SupportedLanguage) => {\n changeLanguage(lang);\n }, []);\n\n return (\n <LanguageContext.Provider value={{ language, setLanguage, languageNames }}>\n {children}\n </LanguageContext.Provider>\n );\n}\n\nexport function useLanguage() {\n const context = useContext(LanguageContext);\n if (context === undefined) {\n throw new Error('useLanguage must be used within a LanguageProvider');\n }\n return context;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { OrganizationSelector } from './chunk-
|
|
2
|
-
import { useOrganization } from './chunk-
|
|
1
|
+
import { OrganizationSelector } from './chunk-2GN4WIOV.js';
|
|
2
|
+
import { useOrganization } from './chunk-ITXOZ4IR.js';
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import { useLocation, useParams, Link } from 'react-router';
|
|
5
5
|
import { useTranslation } from 'react-i18next';
|
|
@@ -220,5 +220,5 @@ function Sidebar({ config }) {
|
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
export { Sidebar };
|
|
223
|
-
//# sourceMappingURL=chunk-
|
|
224
|
-
//# sourceMappingURL=chunk-
|
|
223
|
+
//# sourceMappingURL=chunk-O2ADW2GC.js.map
|
|
224
|
+
//# sourceMappingURL=chunk-O2ADW2GC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Sidebar.tsx"],"names":[],"mappings":"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","file":"chunk-X57K24P3.js","sourcesContent":["import { useState } from 'react';\nimport { useLocation, useParams, Link } from 'react-router';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from '@omnifyjp/ui-components/components/button';\nimport { Separator } from '@omnifyjp/ui-components/components/separator';\nimport { Popover, PopoverContent, PopoverTrigger } from '@omnifyjp/ui-components/components/popover';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@omnifyjp/ui-components/components/tooltip';\nimport {\n ChevronsLeft,\n ChevronsRight,\n ChevronsUpDown,\n ChevronRight,\n Search,\n} from 'lucide-react';\nimport { useOrganization } from '../contexts/OrganizationContext';\nimport { OrganizationSelector } from './OrganizationSelector';\nimport type { ShellConfig, SidebarMenuItem } from '../types';\n\ninterface SidebarProps {\n config: ShellConfig;\n}\n\nexport function Sidebar({ config }: SidebarProps) {\n const location = useLocation();\n const params = useParams();\n const [collapsed, setCollapsed] = useState(false);\n const [contextSwitcherOpen, setContextSwitcherOpen] = useState(false);\n const [contextSearch, setContextSearch] = useState('');\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(new Set());\n const { t } = useTranslation('shell');\n const { selectedOrganization, selectedBranch } = useOrganization();\n\n const { app, sidebar } = config;\n\n // Determine if we're in context mode (e.g., inside a project)\n const contextParamValue = sidebar.contextMenu\n ? params[sidebar.contextMenu.paramName] as string | undefined\n : undefined;\n const isInContext = !!contextParamValue;\n\n const isActive = (path: string) => {\n return location.pathname === path || location.pathname.startsWith(path + '/');\n };\n\n const renderMenuItem = (item: SidebarMenuItem, active: boolean) => {\n const Icon = item.icon;\n const path = item.path!;\n const content = (\n <Link\n to={path}\n className={`flex items-center ${collapsed ? 'justify-center' : 'gap-2'} px-3 py-2 rounded-md text-sm transition-colors ${\n active\n ? 'bg-sidebar-primary/10 text-sidebar-primary font-medium'\n : 'text-sidebar-foreground hover:bg-sidebar-accent'\n }`}\n >\n <Icon className=\"w-4 h-4 flex-shrink-0\" />\n {!collapsed && <span>{item.label}</span>}\n {!collapsed && item.badge !== undefined && item.badge > 0 && (\n <span className=\"ml-auto text-xs bg-muted text-muted-foreground px-1.5 py-0.5 rounded-full\">\n {item.badge}\n </span>\n )}\n </Link>\n );\n\n if (collapsed) {\n return (\n <TooltipProvider key={path} delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n {content}\n </TooltipTrigger>\n <TooltipContent side=\"right\" className=\"font-medium\">\n {item.label}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return <div key={path}>{content}</div>;\n };\n\n const isGroupActive = (item: SidebarMenuItem): boolean => {\n if (item.children) {\n return item.children.some(child => child.path ? isActive(child.path) : false);\n }\n return item.path ? isActive(item.path) : false;\n };\n\n const toggleGroup = (label: string) => {\n setExpandedGroups(prev => {\n const next = new Set(prev);\n if (next.has(label)) {\n next.delete(label);\n } else {\n next.add(label);\n }\n return next;\n });\n };\n\n const renderMenuItemOrGroup = (item: SidebarMenuItem) => {\n if (!item.children) {\n return renderMenuItem(item, item.path ? isActive(item.path) : false);\n }\n\n const groupActive = isGroupActive(item);\n const isExpanded = expandedGroups.has(item.label) || groupActive;\n const Icon = item.icon;\n\n if (collapsed) {\n return (\n <TooltipProvider key={item.label} delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => toggleGroup(item.label)}\n className={`flex items-center justify-center w-full px-3 py-2 rounded-md text-sm transition-colors ${\n groupActive\n ? 'bg-sidebar-primary/10 text-sidebar-primary font-medium'\n : 'text-sidebar-foreground hover:bg-sidebar-accent'\n }`}\n >\n <Icon className=\"w-4 h-4 flex-shrink-0\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\" className=\"font-medium\">\n {item.label}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return (\n <div key={item.label}>\n <button\n onClick={() => toggleGroup(item.label)}\n className={`flex items-center gap-2 w-full px-3 py-2 rounded-md text-sm transition-colors ${\n groupActive\n ? 'text-sidebar-primary font-medium'\n : 'text-sidebar-foreground hover:bg-sidebar-accent'\n }`}\n >\n <Icon className=\"w-4 h-4 flex-shrink-0\" />\n <span>{item.label}</span>\n <ChevronRight className={`w-3.5 h-3.5 ml-auto text-muted-foreground transition-transform duration-200 ${isExpanded ? 'rotate-90' : ''}`} />\n </button>\n {isExpanded && (\n <div className=\"ml-4 pl-2 border-l border-sidebar-border space-y-0.5 mt-0.5\">\n {item.children.map(child => renderMenuItem(child, child.path ? isActive(child.path) : false))}\n </div>\n )}\n </div>\n );\n };\n\n // Get context menu items if in context mode\n const contextMenuItems = isInContext && sidebar.contextMenu\n ? sidebar.contextMenu.getItems(contextParamValue!)\n : [];\n\n const contextHeader = isInContext && sidebar.contextMenu?.getHeader\n ? sidebar.contextMenu.getHeader(contextParamValue!)\n : null;\n\n const footerItems = isInContext && sidebar.contextMenu?.getFooterItems\n ? sidebar.contextMenu.getFooterItems()\n : [];\n\n return (\n <aside className={`${collapsed ? 'w-16' : 'w-64'} bg-sidebar border-r border-sidebar-border flex flex-col transition-all duration-300`}>\n {/* Logo */}\n <div className={`h-header border-b border-sidebar-border flex items-center ${collapsed ? 'justify-center' : 'px-4'} transition-all duration-300`}>\n <Link to=\"/\" className=\"flex items-center gap-2\">\n <div className={`w-8 h-8 rounded-lg flex items-center justify-center flex-shrink-0 ${app.logo.color ? '' : 'bg-primary'}`} style={app.logo.color ? { backgroundColor: app.logo.color } : undefined}>\n <app.logo.icon className=\"w-4 h-4 text-white\" />\n </div>\n {!collapsed && <span className=\"font-bold text-sm\">{app.logo.text}</span>}\n </Link>\n </div>\n\n {/* Menu */}\n <nav className=\"flex-1 px-3 py-3 overflow-y-auto\">\n {isInContext ? (\n <>\n {/* Context Switcher (e.g., project switcher) */}\n {contextHeader && !collapsed ? (\n <Popover open={contextSwitcherOpen} onOpenChange={(open) => { setContextSwitcherOpen(open); if (!open) setContextSearch(''); }}>\n <PopoverTrigger asChild>\n <button className=\"w-full mb-3 px-3 py-2 flex items-center gap-2 rounded-md hover:bg-sidebar-accent transition-colors text-left\">\n {contextHeader}\n <ChevronsUpDown className=\"w-3.5 h-3.5 text-muted-foreground flex-shrink-0\" />\n </button>\n </PopoverTrigger>\n <PopoverContent side=\"right\" align=\"start\" className=\"w-72 p-0\">\n <div className=\"p-2 border-b\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground\" />\n <input\n className=\"w-full pl-8 pr-3 py-1.5 text-sm border rounded-md outline-none focus:ring-1 focus:ring-ring bg-background\"\n placeholder={t('sidebar.searchProject')}\n value={contextSearch}\n onChange={(e) => setContextSearch(e.target.value)}\n autoFocus\n />\n </div>\n </div>\n </PopoverContent>\n </Popover>\n ) : contextHeader && collapsed ? (\n <div className=\"mb-3 w-full flex justify-center py-1 rounded-md hover:bg-sidebar-accent transition-colors\">\n {contextHeader}\n </div>\n ) : null}\n\n {!collapsed && contextHeader && <Separator className=\"my-3\" />}\n\n {/* Context Menu Items */}\n <div className=\"space-y-1\">\n {contextMenuItems.map((item) => {\n const active = item.path ? isActive(item.path) : false;\n return renderMenuItem(item, active);\n })}\n </div>\n\n {footerItems.length > 0 && (\n <>\n {!collapsed && <Separator className=\"my-3\" />}\n <div className=\"space-y-1\">\n {footerItems.map((item) => renderMenuItem(item, false))}\n </div>\n </>\n )}\n </>\n ) : (\n <>\n {/* Main Menu Items */}\n <div className=\"space-y-1\">\n {sidebar.menuItems.map((item) => renderMenuItemOrGroup(item))}\n </div>\n\n {sidebar.recentItems && (\n <>\n {!collapsed && <Separator className=\"my-3\" />}\n\n {!collapsed ? (\n <div className=\"space-y-1\">\n <h3 className=\"px-3 py-1 text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n {sidebar.recentItems.title}\n </h3>\n <div className=\"space-y-0.5\">\n {sidebar.recentItems.items.map((item) => (\n <Link\n key={item.path}\n to={item.path}\n className=\"flex items-center gap-2 px-3 py-2 rounded-md text-sm text-sidebar-foreground hover:bg-sidebar-accent\"\n >\n {item.color && (\n <div\n className=\"w-5 h-5 rounded flex items-center justify-center text-white text-[9px] font-bold flex-shrink-0\"\n style={{ backgroundColor: item.color }}\n >\n {item.badge}\n </div>\n )}\n <span className=\"truncate\">{item.label}</span>\n </Link>\n ))}\n </div>\n </div>\n ) : (\n <div className=\"space-y-0.5 mt-3\">\n {sidebar.recentItems.items.map((item) => (\n <TooltipProvider key={item.path} delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Link\n to={item.path}\n className=\"flex justify-center px-3 py-2 rounded-md text-sidebar-foreground hover:bg-sidebar-accent\"\n >\n {item.color && (\n <div\n className=\"w-5 h-5 rounded flex items-center justify-center text-white text-[9px] font-bold\"\n style={{ backgroundColor: item.color }}\n >\n {item.badge}\n </div>\n )}\n </Link>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n <p className=\"font-medium text-sm\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ))}\n </div>\n )}\n </>\n )}\n </>\n )}\n </nav>\n\n {/* Collapse Toggle Button */}\n <div className=\"px-3 py-2 border-t border-sidebar-border\">\n <TooltipProvider delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setCollapsed(!collapsed)}\n className={`w-full h-8 ${collapsed ? 'px-0 justify-center' : 'justify-start'} hover:bg-sidebar-accent`}\n >\n {collapsed ? (\n <ChevronsRight className=\"w-3.5 h-3.5 text-muted-foreground\" />\n ) : (\n <>\n <ChevronsLeft className=\"w-3.5 h-3.5 text-muted-foreground mr-2\" />\n <span className=\"text-xs text-muted-foreground\">{t('sidebar.collapse')}</span>\n </>\n )}\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n {collapsed ? t('sidebar.expandSidebar') : t('sidebar.collapseSidebar')}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n\n {/* Organization & Branch selector */}\n {!collapsed ? (\n <div className=\"border-t border-sidebar-border\">\n <OrganizationSelector variant=\"sidebar\" />\n </div>\n ) : (\n selectedOrganization && (\n <TooltipProvider delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"px-3 py-3 border-t border-sidebar-border flex justify-center cursor-pointer hover:bg-sidebar-accent transition-colors\">\n <div\n className=\"w-8 h-8 rounded-lg flex items-center justify-center text-white font-bold text-xs\"\n style={{ backgroundColor: selectedOrganization.color }}\n >\n {selectedOrganization.shortName}\n </div>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n <p className=\"font-semibold text-sm\">{selectedOrganization.name}</p>\n {selectedBranch && (\n <p className=\"text-xs text-muted-foreground\">{selectedBranch.name}</p>\n )}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n )}\n </aside>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Sidebar.tsx"],"names":[],"mappings":"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","file":"chunk-O2ADW2GC.js","sourcesContent":["import { useState } from 'react';\nimport { useLocation, useParams, Link } from 'react-router';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from '@omnifyjp/ui-components/components/button';\nimport { Separator } from '@omnifyjp/ui-components/components/separator';\nimport { Popover, PopoverContent, PopoverTrigger } from '@omnifyjp/ui-components/components/popover';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@omnifyjp/ui-components/components/tooltip';\nimport {\n ChevronsLeft,\n ChevronsRight,\n ChevronsUpDown,\n ChevronRight,\n Search,\n} from 'lucide-react';\nimport { useOrganization } from '../contexts/OrganizationContext';\nimport { OrganizationSelector } from './OrganizationSelector';\nimport type { ShellConfig, SidebarMenuItem } from '../types';\n\ninterface SidebarProps {\n config: ShellConfig;\n}\n\nexport function Sidebar({ config }: SidebarProps) {\n const location = useLocation();\n const params = useParams();\n const [collapsed, setCollapsed] = useState(false);\n const [contextSwitcherOpen, setContextSwitcherOpen] = useState(false);\n const [contextSearch, setContextSearch] = useState('');\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(new Set());\n const { t } = useTranslation('shell');\n const { selectedOrganization, selectedBranch } = useOrganization();\n\n const { app, sidebar } = config;\n\n // Determine if we're in context mode (e.g., inside a project)\n const contextParamValue = sidebar.contextMenu\n ? params[sidebar.contextMenu.paramName] as string | undefined\n : undefined;\n const isInContext = !!contextParamValue;\n\n const isActive = (path: string) => {\n return location.pathname === path || location.pathname.startsWith(path + '/');\n };\n\n const renderMenuItem = (item: SidebarMenuItem, active: boolean) => {\n const Icon = item.icon;\n const path = item.path!;\n const content = (\n <Link\n to={path}\n className={`flex items-center ${collapsed ? 'justify-center' : 'gap-2'} px-3 py-2 rounded-md text-sm transition-colors ${\n active\n ? 'bg-sidebar-primary/10 text-sidebar-primary font-medium'\n : 'text-sidebar-foreground hover:bg-sidebar-accent'\n }`}\n >\n <Icon className=\"w-4 h-4 flex-shrink-0\" />\n {!collapsed && <span>{item.label}</span>}\n {!collapsed && item.badge !== undefined && item.badge > 0 && (\n <span className=\"ml-auto text-xs bg-muted text-muted-foreground px-1.5 py-0.5 rounded-full\">\n {item.badge}\n </span>\n )}\n </Link>\n );\n\n if (collapsed) {\n return (\n <TooltipProvider key={path} delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n {content}\n </TooltipTrigger>\n <TooltipContent side=\"right\" className=\"font-medium\">\n {item.label}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return <div key={path}>{content}</div>;\n };\n\n const isGroupActive = (item: SidebarMenuItem): boolean => {\n if (item.children) {\n return item.children.some(child => child.path ? isActive(child.path) : false);\n }\n return item.path ? isActive(item.path) : false;\n };\n\n const toggleGroup = (label: string) => {\n setExpandedGroups(prev => {\n const next = new Set(prev);\n if (next.has(label)) {\n next.delete(label);\n } else {\n next.add(label);\n }\n return next;\n });\n };\n\n const renderMenuItemOrGroup = (item: SidebarMenuItem) => {\n if (!item.children) {\n return renderMenuItem(item, item.path ? isActive(item.path) : false);\n }\n\n const groupActive = isGroupActive(item);\n const isExpanded = expandedGroups.has(item.label) || groupActive;\n const Icon = item.icon;\n\n if (collapsed) {\n return (\n <TooltipProvider key={item.label} delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => toggleGroup(item.label)}\n className={`flex items-center justify-center w-full px-3 py-2 rounded-md text-sm transition-colors ${\n groupActive\n ? 'bg-sidebar-primary/10 text-sidebar-primary font-medium'\n : 'text-sidebar-foreground hover:bg-sidebar-accent'\n }`}\n >\n <Icon className=\"w-4 h-4 flex-shrink-0\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\" className=\"font-medium\">\n {item.label}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return (\n <div key={item.label}>\n <button\n onClick={() => toggleGroup(item.label)}\n className={`flex items-center gap-2 w-full px-3 py-2 rounded-md text-sm transition-colors ${\n groupActive\n ? 'text-sidebar-primary font-medium'\n : 'text-sidebar-foreground hover:bg-sidebar-accent'\n }`}\n >\n <Icon className=\"w-4 h-4 flex-shrink-0\" />\n <span>{item.label}</span>\n <ChevronRight className={`w-3.5 h-3.5 ml-auto text-muted-foreground transition-transform duration-200 ${isExpanded ? 'rotate-90' : ''}`} />\n </button>\n {isExpanded && (\n <div className=\"ml-4 pl-2 border-l border-sidebar-border space-y-0.5 mt-0.5\">\n {item.children.map(child => renderMenuItem(child, child.path ? isActive(child.path) : false))}\n </div>\n )}\n </div>\n );\n };\n\n // Get context menu items if in context mode\n const contextMenuItems = isInContext && sidebar.contextMenu\n ? sidebar.contextMenu.getItems(contextParamValue!)\n : [];\n\n const contextHeader = isInContext && sidebar.contextMenu?.getHeader\n ? sidebar.contextMenu.getHeader(contextParamValue!)\n : null;\n\n const footerItems = isInContext && sidebar.contextMenu?.getFooterItems\n ? sidebar.contextMenu.getFooterItems()\n : [];\n\n return (\n <aside className={`${collapsed ? 'w-16' : 'w-64'} bg-sidebar border-r border-sidebar-border flex flex-col transition-all duration-300`}>\n {/* Logo */}\n <div className={`h-header border-b border-sidebar-border flex items-center ${collapsed ? 'justify-center' : 'px-4'} transition-all duration-300`}>\n <Link to=\"/\" className=\"flex items-center gap-2\">\n <div className={`w-8 h-8 rounded-lg flex items-center justify-center flex-shrink-0 ${app.logo.color ? '' : 'bg-primary'}`} style={app.logo.color ? { backgroundColor: app.logo.color } : undefined}>\n <app.logo.icon className=\"w-4 h-4 text-white\" />\n </div>\n {!collapsed && <span className=\"font-bold text-sm\">{app.logo.text}</span>}\n </Link>\n </div>\n\n {/* Menu */}\n <nav className=\"flex-1 px-3 py-3 overflow-y-auto\">\n {isInContext ? (\n <>\n {/* Context Switcher (e.g., project switcher) */}\n {contextHeader && !collapsed ? (\n <Popover open={contextSwitcherOpen} onOpenChange={(open) => { setContextSwitcherOpen(open); if (!open) setContextSearch(''); }}>\n <PopoverTrigger asChild>\n <button className=\"w-full mb-3 px-3 py-2 flex items-center gap-2 rounded-md hover:bg-sidebar-accent transition-colors text-left\">\n {contextHeader}\n <ChevronsUpDown className=\"w-3.5 h-3.5 text-muted-foreground flex-shrink-0\" />\n </button>\n </PopoverTrigger>\n <PopoverContent side=\"right\" align=\"start\" className=\"w-72 p-0\">\n <div className=\"p-2 border-b\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground\" />\n <input\n className=\"w-full pl-8 pr-3 py-1.5 text-sm border rounded-md outline-none focus:ring-1 focus:ring-ring bg-background\"\n placeholder={t('sidebar.searchProject')}\n value={contextSearch}\n onChange={(e) => setContextSearch(e.target.value)}\n autoFocus\n />\n </div>\n </div>\n </PopoverContent>\n </Popover>\n ) : contextHeader && collapsed ? (\n <div className=\"mb-3 w-full flex justify-center py-1 rounded-md hover:bg-sidebar-accent transition-colors\">\n {contextHeader}\n </div>\n ) : null}\n\n {!collapsed && contextHeader && <Separator className=\"my-3\" />}\n\n {/* Context Menu Items */}\n <div className=\"space-y-1\">\n {contextMenuItems.map((item) => {\n const active = item.path ? isActive(item.path) : false;\n return renderMenuItem(item, active);\n })}\n </div>\n\n {footerItems.length > 0 && (\n <>\n {!collapsed && <Separator className=\"my-3\" />}\n <div className=\"space-y-1\">\n {footerItems.map((item) => renderMenuItem(item, false))}\n </div>\n </>\n )}\n </>\n ) : (\n <>\n {/* Main Menu Items */}\n <div className=\"space-y-1\">\n {sidebar.menuItems.map((item) => renderMenuItemOrGroup(item))}\n </div>\n\n {sidebar.recentItems && (\n <>\n {!collapsed && <Separator className=\"my-3\" />}\n\n {!collapsed ? (\n <div className=\"space-y-1\">\n <h3 className=\"px-3 py-1 text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n {sidebar.recentItems.title}\n </h3>\n <div className=\"space-y-0.5\">\n {sidebar.recentItems.items.map((item) => (\n <Link\n key={item.path}\n to={item.path}\n className=\"flex items-center gap-2 px-3 py-2 rounded-md text-sm text-sidebar-foreground hover:bg-sidebar-accent\"\n >\n {item.color && (\n <div\n className=\"w-5 h-5 rounded flex items-center justify-center text-white text-[9px] font-bold flex-shrink-0\"\n style={{ backgroundColor: item.color }}\n >\n {item.badge}\n </div>\n )}\n <span className=\"truncate\">{item.label}</span>\n </Link>\n ))}\n </div>\n </div>\n ) : (\n <div className=\"space-y-0.5 mt-3\">\n {sidebar.recentItems.items.map((item) => (\n <TooltipProvider key={item.path} delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Link\n to={item.path}\n className=\"flex justify-center px-3 py-2 rounded-md text-sidebar-foreground hover:bg-sidebar-accent\"\n >\n {item.color && (\n <div\n className=\"w-5 h-5 rounded flex items-center justify-center text-white text-[9px] font-bold\"\n style={{ backgroundColor: item.color }}\n >\n {item.badge}\n </div>\n )}\n </Link>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n <p className=\"font-medium text-sm\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ))}\n </div>\n )}\n </>\n )}\n </>\n )}\n </nav>\n\n {/* Collapse Toggle Button */}\n <div className=\"px-3 py-2 border-t border-sidebar-border\">\n <TooltipProvider delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setCollapsed(!collapsed)}\n className={`w-full h-8 ${collapsed ? 'px-0 justify-center' : 'justify-start'} hover:bg-sidebar-accent`}\n >\n {collapsed ? (\n <ChevronsRight className=\"w-3.5 h-3.5 text-muted-foreground\" />\n ) : (\n <>\n <ChevronsLeft className=\"w-3.5 h-3.5 text-muted-foreground mr-2\" />\n <span className=\"text-xs text-muted-foreground\">{t('sidebar.collapse')}</span>\n </>\n )}\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n {collapsed ? t('sidebar.expandSidebar') : t('sidebar.collapseSidebar')}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n\n {/* Organization & Branch selector */}\n {!collapsed ? (\n <div className=\"border-t border-sidebar-border\">\n <OrganizationSelector variant=\"sidebar\" />\n </div>\n ) : (\n selectedOrganization && (\n <TooltipProvider delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"px-3 py-3 border-t border-sidebar-border flex justify-center cursor-pointer hover:bg-sidebar-accent transition-colors\">\n <div\n className=\"w-8 h-8 rounded-lg flex items-center justify-center text-white font-bold text-xs\"\n style={{ backgroundColor: selectedOrganization.color }}\n >\n {selectedOrganization.shortName}\n </div>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n <p className=\"font-semibold text-sm\">{selectedOrganization.name}</p>\n {selectedBranch && (\n <p className=\"text-xs text-muted-foreground\">{selectedBranch.name}</p>\n )}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n )}\n </aside>\n );\n}\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { Sidebar } from './chunk-O2ADW2GC.js';
|
|
1
2
|
import { ThemeProvider } from './chunk-EJEVW4RO.js';
|
|
3
|
+
import { Header } from './chunk-UR2QLIS2.js';
|
|
4
|
+
import { LanguageProvider } from './chunk-NVPNMQSR.js';
|
|
2
5
|
import { i18n } from './chunk-OY3PSPA5.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { Sidebar } from './chunk-X57K24P3.js';
|
|
6
|
-
import { OrganizationProvider } from './chunk-SHHZRZMM.js';
|
|
6
|
+
import { OrganizationSetupModal } from './chunk-FVOQZTHE.js';
|
|
7
|
+
import { OrganizationProvider } from './chunk-ITXOZ4IR.js';
|
|
7
8
|
import { Outlet } from 'react-router';
|
|
8
9
|
import { I18nextProvider } from 'react-i18next';
|
|
9
10
|
import { Toaster } from '@omnifyjp/ui-components/components/sonner';
|
|
@@ -11,11 +12,12 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
11
12
|
|
|
12
13
|
function AppShell({ config, extra }) {
|
|
13
14
|
const { organization } = config;
|
|
14
|
-
return /* @__PURE__ */ jsx(ThemeProvider, { children: /* @__PURE__ */ jsx(I18nextProvider, { i18n, children: /* @__PURE__ */ jsx(
|
|
15
|
+
return /* @__PURE__ */ jsx(ThemeProvider, { children: /* @__PURE__ */ jsx(I18nextProvider, { i18n, children: /* @__PURE__ */ jsx(LanguageProvider, { children: /* @__PURE__ */ jsx(
|
|
15
16
|
OrganizationProvider,
|
|
16
17
|
{
|
|
17
18
|
organizations: organization?.organizations,
|
|
18
19
|
branches: organization?.branches,
|
|
20
|
+
requireBranch: organization?.requireBranch,
|
|
19
21
|
onOrganizationChange: organization?.onOrganizationChange,
|
|
20
22
|
onBranchChange: organization?.onBranchChange,
|
|
21
23
|
children: /* @__PURE__ */ jsxs("div", { className: "flex h-screen bg-background text-foreground", children: [
|
|
@@ -29,9 +31,9 @@ function AppShell({ config, extra }) {
|
|
|
29
31
|
/* @__PURE__ */ jsx(OrganizationSetupModal, {})
|
|
30
32
|
] })
|
|
31
33
|
}
|
|
32
|
-
) }) });
|
|
34
|
+
) }) }) });
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
export { AppShell };
|
|
36
|
-
//# sourceMappingURL=chunk-
|
|
37
|
-
//# sourceMappingURL=chunk-
|
|
38
|
+
//# sourceMappingURL=chunk-UASABUQA.js.map
|
|
39
|
+
//# sourceMappingURL=chunk-UASABUQA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/AppShell.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAiCO,SAAS,QAAA,CAAS,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAkB;AACzD,EAAA,MAAM,EAAE,cAAa,GAAI,MAAA;AAEzB,EAAA,2BACG,aAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,IAAA,EACf,8BAAC,gBAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACC,eAAe,YAAA,EAAc,aAAA;AAAA,MAC7B,UAAU,YAAA,EAAc,QAAA;AAAA,MACxB,eAAe,YAAA,EAAc,aAAA;AAAA,MAC7B,sBAAsB,YAAA,EAAc,oBAAA;AAAA,MACpC,gBAAgB,YAAA,EAAc,cAAA;AAAA,MAE9B,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,WAAQ,MAAA,EAAgB,CAAA;AAAA,wBACzB,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UAAO,MAAA,EAAgB,CAAA;AAAA,8BACvB,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAA,EACd,QAAA,kBAAA,GAAA,CAAC,UAAO,CAAA,EACV;AAAA,SAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,OAAA,EAAA,EAAQ,UAAA,EAAU,IAAA,EAAC,UAAS,cAAA,EAAe,CAAA;AAAA,QAC3C,KAAA;AAAA,4BACA,sBAAA,EAAA,EAAuB;AAAA,OAAA,EAC1B;AAAA;AAAA,GACF,EACF,GACF,CAAA,EACF,CAAA;AAEJ","file":"chunk-UASABUQA.js","sourcesContent":["import { ReactNode } from 'react';\nimport { Outlet } from 'react-router';\nimport { I18nextProvider } from 'react-i18next';\nimport { Toaster } from '@omnifyjp/ui-components/components/sonner';\nimport { ThemeProvider } from '../contexts/ThemeContext';\nimport { LanguageProvider } from '../contexts/LanguageContext';\nimport { OrganizationProvider } from '../contexts/OrganizationContext';\nimport { Sidebar } from './Sidebar';\nimport { Header } from './Header';\nimport { OrganizationSetupModal } from './OrganizationSetupModal';\nimport { i18n } from '../i18n';\nimport type { ShellConfig } from '../types';\n\ninterface AppShellProps {\n config: ShellConfig;\n /** Extra content to render alongside the main content (e.g., ChatWidget) */\n extra?: ReactNode;\n}\n\n/**\n * The main application shell.\n * Use as a route layout element in React Router:\n *\n * ```tsx\n * const router = createBrowserRouter([{\n * path: '/',\n * element: <AppShell config={config} />,\n * children: [\n * { index: true, element: <Dashboard /> },\n * ],\n * }]);\n * ```\n */\nexport function AppShell({ config, extra }: AppShellProps) {\n const { organization } = config;\n\n return (\n <ThemeProvider>\n <I18nextProvider i18n={i18n}>\n <LanguageProvider>\n <OrganizationProvider\n organizations={organization?.organizations}\n branches={organization?.branches}\n requireBranch={organization?.requireBranch}\n onOrganizationChange={organization?.onOrganizationChange}\n onBranchChange={organization?.onBranchChange}\n >\n <div className=\"flex h-screen bg-background text-foreground\">\n <Sidebar config={config} />\n <div className=\"flex-1 flex flex-col overflow-hidden\">\n <Header config={config} />\n <main className=\"flex-1 overflow-auto\">\n <Outlet />\n </main>\n </div>\n <Toaster richColors position=\"bottom-right\" />\n {extra}\n <OrganizationSetupModal />\n </div>\n </OrganizationProvider>\n </LanguageProvider>\n </I18nextProvider>\n </ThemeProvider>\n );\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { LanguageSelector } from './chunk-735JNJJO.js';
|
|
2
|
+
import { OrganizationSelector } from './chunk-2GN4WIOV.js';
|
|
1
3
|
import { ServiceMenu } from './chunk-5BL4VFRJ.js';
|
|
2
|
-
import { OrganizationSelector } from './chunk-DTM76EJD.js';
|
|
3
4
|
import { useTranslation } from 'react-i18next';
|
|
4
5
|
import { useNavigate } from 'react-router';
|
|
5
6
|
import { Button } from '@omnifyjp/ui-components/components/button';
|
|
@@ -32,6 +33,7 @@ function Header({ config }) {
|
|
|
32
33
|
] })
|
|
33
34
|
] }),
|
|
34
35
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
36
|
+
/* @__PURE__ */ jsx(LanguageSelector, { showLabel: false }),
|
|
35
37
|
header?.notifications && /* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
36
38
|
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "icon", className: "relative", children: [
|
|
37
39
|
/* @__PURE__ */ jsx(Bell, { className: "w-5 h-5" }),
|
|
@@ -87,5 +89,5 @@ function Header({ config }) {
|
|
|
87
89
|
}
|
|
88
90
|
|
|
89
91
|
export { Header };
|
|
90
|
-
//# sourceMappingURL=chunk-
|
|
91
|
-
//# sourceMappingURL=chunk-
|
|
92
|
+
//# sourceMappingURL=chunk-UR2QLIS2.js.map
|
|
93
|
+
//# sourceMappingURL=chunk-UR2QLIS2.js.map
|