@endora-commerce/mod-organizations 0.100.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +62 -0
- package/dist/admin/components/OrganizationSalesRepsTab.d.ts +27 -0
- package/dist/admin/components/OrganizationSalesRepsTab.d.ts.map +1 -0
- package/dist/admin/components/OrganizationSalesRepsTab.js +170 -0
- package/dist/admin/components/OrganizationSalesRepsTab.js.map +1 -0
- package/dist/admin/index.d.ts +30 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +59 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/pages/OrganizationDetail.d.ts +9 -0
- package/dist/admin/pages/OrganizationDetail.d.ts.map +1 -0
- package/dist/admin/pages/OrganizationDetail.js +247 -0
- package/dist/admin/pages/OrganizationDetail.js.map +1 -0
- package/dist/admin/pages/OrganizationsList.d.ts +9 -0
- package/dist/admin/pages/OrganizationsList.d.ts.map +1 -0
- package/dist/admin/pages/OrganizationsList.js +73 -0
- package/dist/admin/pages/OrganizationsList.js.map +1 -0
- package/dist/admin/panels/ApplicablePriceListsPanel.d.ts +12 -0
- package/dist/admin/panels/ApplicablePriceListsPanel.d.ts.map +1 -0
- package/dist/admin/panels/ApplicablePriceListsPanel.js +49 -0
- package/dist/admin/panels/ApplicablePriceListsPanel.js.map +1 -0
- package/dist/admin/panels/FulfilmentStrategyPanel.d.ts +16 -0
- package/dist/admin/panels/FulfilmentStrategyPanel.d.ts.map +1 -0
- package/dist/admin/panels/FulfilmentStrategyPanel.js +29 -0
- package/dist/admin/panels/FulfilmentStrategyPanel.js.map +1 -0
- package/dist/admin/panels/HierarchyPanel.d.ts +15 -0
- package/dist/admin/panels/HierarchyPanel.d.ts.map +1 -0
- package/dist/admin/panels/HierarchyPanel.js +65 -0
- package/dist/admin/panels/HierarchyPanel.js.map +1 -0
- package/dist/admin/panels/ModerationActionsPanel.d.ts +28 -0
- package/dist/admin/panels/ModerationActionsPanel.d.ts.map +1 -0
- package/dist/admin/panels/ModerationActionsPanel.js +111 -0
- package/dist/admin/panels/ModerationActionsPanel.js.map +1 -0
- package/dist/admin/panels/RestrictionsPanel.d.ts +24 -0
- package/dist/admin/panels/RestrictionsPanel.d.ts.map +1 -0
- package/dist/admin/panels/RestrictionsPanel.js +121 -0
- package/dist/admin/panels/RestrictionsPanel.js.map +1 -0
- package/dist/admin/panels/VatValidationPanel.d.ts +28 -0
- package/dist/admin/panels/VatValidationPanel.d.ts.map +1 -0
- package/dist/admin/panels/VatValidationPanel.js +79 -0
- package/dist/admin/panels/VatValidationPanel.js.map +1 -0
- package/dist/backend/commands/move.command.d.ts +11 -0
- package/dist/backend/commands/move.command.d.ts.map +1 -0
- package/dist/backend/commands/move.command.js +11 -0
- package/dist/backend/commands/move.command.js.map +1 -0
- package/dist/backend/commands/set-cart-approval-policy.command.d.ts +31 -0
- package/dist/backend/commands/set-cart-approval-policy.command.d.ts.map +1 -0
- package/dist/backend/commands/set-cart-approval-policy.command.js +56 -0
- package/dist/backend/commands/set-cart-approval-policy.command.js.map +1 -0
- package/dist/backend/commands/set-credit-mode.command.d.ts +16 -0
- package/dist/backend/commands/set-credit-mode.command.d.ts.map +1 -0
- package/dist/backend/commands/set-credit-mode.command.js +25 -0
- package/dist/backend/commands/set-credit-mode.command.js.map +1 -0
- package/dist/backend/commands/set-parent.command.d.ts +26 -0
- package/dist/backend/commands/set-parent.command.d.ts.map +1 -0
- package/dist/backend/commands/set-parent.command.js +51 -0
- package/dist/backend/commands/set-parent.command.js.map +1 -0
- package/dist/backend/demo/reset.d.ts +20 -0
- package/dist/backend/demo/reset.d.ts.map +1 -0
- package/dist/backend/demo/reset.js +11 -0
- package/dist/backend/demo/reset.js.map +1 -0
- package/dist/backend/demo/rows.d.ts +44 -0
- package/dist/backend/demo/rows.d.ts.map +1 -0
- package/dist/backend/demo/rows.js +44 -0
- package/dist/backend/demo/rows.js.map +1 -0
- package/dist/backend/demo/seed.d.ts +20 -0
- package/dist/backend/demo/seed.d.ts.map +1 -0
- package/dist/backend/demo/seed.js +28 -0
- package/dist/backend/demo/seed.js.map +1 -0
- package/dist/backend/email-templates/invitation.d.ts +23 -0
- package/dist/backend/email-templates/invitation.d.ts.map +1 -0
- package/dist/backend/email-templates/invitation.js +35 -0
- package/dist/backend/email-templates/invitation.js.map +1 -0
- package/dist/backend/email-templates/transactional-defaults.d.ts +54 -0
- package/dist/backend/email-templates/transactional-defaults.d.ts.map +1 -0
- package/dist/backend/email-templates/transactional-defaults.js +242 -0
- package/dist/backend/email-templates/transactional-defaults.js.map +1 -0
- package/dist/backend/email-templates/verification.d.ts +14 -0
- package/dist/backend/email-templates/verification.d.ts.map +1 -0
- package/dist/backend/email-templates/verification.js +34 -0
- package/dist/backend/email-templates/verification.js.map +1 -0
- package/dist/backend/entities/email-verification-token.entity.d.ts +17 -0
- package/dist/backend/entities/email-verification-token.entity.d.ts.map +1 -0
- package/dist/backend/entities/email-verification-token.entity.js +60 -0
- package/dist/backend/entities/email-verification-token.entity.js.map +1 -0
- package/dist/backend/entities/organization-delivery-method-link.entity.d.ts +14 -0
- package/dist/backend/entities/organization-delivery-method-link.entity.d.ts.map +1 -0
- package/dist/backend/entities/organization-delivery-method-link.entity.js +41 -0
- package/dist/backend/entities/organization-delivery-method-link.entity.js.map +1 -0
- package/dist/backend/entities/organization-invitation.entity.d.ts +21 -0
- package/dist/backend/entities/organization-invitation.entity.d.ts.map +1 -0
- package/dist/backend/entities/organization-invitation.entity.js +85 -0
- package/dist/backend/entities/organization-invitation.entity.js.map +1 -0
- package/dist/backend/entities/organization-payment-method-link.entity.d.ts +14 -0
- package/dist/backend/entities/organization-payment-method-link.entity.d.ts.map +1 -0
- package/dist/backend/entities/organization-payment-method-link.entity.js +41 -0
- package/dist/backend/entities/organization-payment-method-link.entity.js.map +1 -0
- package/dist/backend/entities/organization-sales-rep-assignment.entity.d.ts +17 -0
- package/dist/backend/entities/organization-sales-rep-assignment.entity.d.ts.map +1 -0
- package/dist/backend/entities/organization-sales-rep-assignment.entity.js +56 -0
- package/dist/backend/entities/organization-sales-rep-assignment.entity.js.map +1 -0
- package/dist/backend/entities/organization-tax-id-validation.entity.d.ts +29 -0
- package/dist/backend/entities/organization-tax-id-validation.entity.d.ts.map +1 -0
- package/dist/backend/entities/organization-tax-id-validation.entity.js +78 -0
- package/dist/backend/entities/organization-tax-id-validation.entity.js.map +1 -0
- package/dist/backend/entities/organization-warehouse-link.entity.d.ts +15 -0
- package/dist/backend/entities/organization-warehouse-link.entity.d.ts.map +1 -0
- package/dist/backend/entities/organization-warehouse-link.entity.js +42 -0
- package/dist/backend/entities/organization-warehouse-link.entity.js.map +1 -0
- package/dist/backend/entities/organization.entity.d.ts +125 -0
- package/dist/backend/entities/organization.entity.d.ts.map +1 -0
- package/dist/backend/entities/organization.entity.js +282 -0
- package/dist/backend/entities/organization.entity.js.map +1 -0
- package/dist/backend/index.d.ts +250 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +506 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/integrations/ministerstwo-finansow-client.d.ts +22 -0
- package/dist/backend/integrations/ministerstwo-finansow-client.d.ts.map +1 -0
- package/dist/backend/integrations/ministerstwo-finansow-client.js +172 -0
- package/dist/backend/integrations/ministerstwo-finansow-client.js.map +1 -0
- package/dist/backend/integrations/vies-client.d.ts +18 -0
- package/dist/backend/integrations/vies-client.d.ts.map +1 -0
- package/dist/backend/integrations/vies-client.js +133 -0
- package/dist/backend/integrations/vies-client.js.map +1 -0
- package/dist/backend/plugin.d.ts +126 -0
- package/dist/backend/plugin.d.ts.map +1 -0
- package/dist/backend/plugin.js +139 -0
- package/dist/backend/plugin.js.map +1 -0
- package/dist/backend/routes.admin.d.ts +66 -0
- package/dist/backend/routes.admin.d.ts.map +1 -0
- package/dist/backend/routes.admin.js +711 -0
- package/dist/backend/routes.admin.js.map +1 -0
- package/dist/backend/routes.customer.d.ts +33 -0
- package/dist/backend/routes.customer.d.ts.map +1 -0
- package/dist/backend/routes.customer.js +139 -0
- package/dist/backend/routes.customer.js.map +1 -0
- package/dist/backend/routes.members.d.ts +31 -0
- package/dist/backend/routes.members.d.ts.map +1 -0
- package/dist/backend/routes.members.js +109 -0
- package/dist/backend/routes.members.js.map +1 -0
- package/dist/backend/routes.public.d.ts +49 -0
- package/dist/backend/routes.public.d.ts.map +1 -0
- package/dist/backend/routes.public.js +220 -0
- package/dist/backend/routes.public.js.map +1 -0
- package/dist/backend/routes.sales-reps.d.ts +46 -0
- package/dist/backend/routes.sales-reps.d.ts.map +1 -0
- package/dist/backend/routes.sales-reps.js +114 -0
- package/dist/backend/routes.sales-reps.js.map +1 -0
- package/dist/backend/routes.storefront.d.ts +25 -0
- package/dist/backend/routes.storefront.d.ts.map +1 -0
- package/dist/backend/routes.storefront.js +65 -0
- package/dist/backend/routes.storefront.js.map +1 -0
- package/dist/backend/schemas/organization.d.ts +59 -0
- package/dist/backend/schemas/organization.d.ts.map +1 -0
- package/dist/backend/schemas/organization.js +55 -0
- package/dist/backend/schemas/organization.js.map +1 -0
- package/dist/backend/schemas/settings.d.ts +30 -0
- package/dist/backend/schemas/settings.d.ts.map +1 -0
- package/dist/backend/schemas/settings.js +35 -0
- package/dist/backend/schemas/settings.js.map +1 -0
- package/dist/backend/services/email-verification-service.d.ts +45 -0
- package/dist/backend/services/email-verification-service.d.ts.map +1 -0
- package/dist/backend/services/email-verification-service.js +95 -0
- package/dist/backend/services/email-verification-service.js.map +1 -0
- package/dist/backend/services/invitation-service.d.ts +85 -0
- package/dist/backend/services/invitation-service.d.ts.map +1 -0
- package/dist/backend/services/invitation-service.js +266 -0
- package/dist/backend/services/invitation-service.js.map +1 -0
- package/dist/backend/services/normalize-name.d.ts +14 -0
- package/dist/backend/services/normalize-name.d.ts.map +1 -0
- package/dist/backend/services/normalize-name.js +14 -0
- package/dist/backend/services/normalize-name.js.map +1 -0
- package/dist/backend/services/org-registration-notifier.d.ts +36 -0
- package/dist/backend/services/org-registration-notifier.d.ts.map +1 -0
- package/dist/backend/services/org-registration-notifier.js +109 -0
- package/dist/backend/services/org-registration-notifier.js.map +1 -0
- package/dist/backend/services/org-template-email.d.ts +18 -0
- package/dist/backend/services/org-template-email.d.ts.map +1 -0
- package/dist/backend/services/org-template-email.js +16 -0
- package/dist/backend/services/org-template-email.js.map +1 -0
- package/dist/backend/services/organization-context-service.d.ts +52 -0
- package/dist/backend/services/organization-context-service.d.ts.map +1 -0
- package/dist/backend/services/organization-context-service.js +70 -0
- package/dist/backend/services/organization-context-service.js.map +1 -0
- package/dist/backend/services/organization-country-reference.d.ts +11 -0
- package/dist/backend/services/organization-country-reference.d.ts.map +1 -0
- package/dist/backend/services/organization-country-reference.js +24 -0
- package/dist/backend/services/organization-country-reference.js.map +1 -0
- package/dist/backend/services/organization-details-port.d.ts +33 -0
- package/dist/backend/services/organization-details-port.d.ts.map +1 -0
- package/dist/backend/services/organization-details-port.js +95 -0
- package/dist/backend/services/organization-details-port.js.map +1 -0
- package/dist/backend/services/organization-effective-pricelists-service.d.ts +50 -0
- package/dist/backend/services/organization-effective-pricelists-service.d.ts.map +1 -0
- package/dist/backend/services/organization-effective-pricelists-service.js +68 -0
- package/dist/backend/services/organization-effective-pricelists-service.js.map +1 -0
- package/dist/backend/services/organization-inheritance-service.d.ts +73 -0
- package/dist/backend/services/organization-inheritance-service.d.ts.map +1 -0
- package/dist/backend/services/organization-inheritance-service.js +63 -0
- package/dist/backend/services/organization-inheritance-service.js.map +1 -0
- package/dist/backend/services/organization-moderation-service.d.ts +124 -0
- package/dist/backend/services/organization-moderation-service.d.ts.map +1 -0
- package/dist/backend/services/organization-moderation-service.js +337 -0
- package/dist/backend/services/organization-moderation-service.js.map +1 -0
- package/dist/backend/services/organization-restriction-service.d.ts +70 -0
- package/dist/backend/services/organization-restriction-service.d.ts.map +1 -0
- package/dist/backend/services/organization-restriction-service.js +210 -0
- package/dist/backend/services/organization-restriction-service.js.map +1 -0
- package/dist/backend/services/organization-tax-id-validation-service.d.ts +59 -0
- package/dist/backend/services/organization-tax-id-validation-service.d.ts.map +1 -0
- package/dist/backend/services/organization-tax-id-validation-service.js +115 -0
- package/dist/backend/services/organization-tax-id-validation-service.js.map +1 -0
- package/dist/backend/services/organization-tree-service.d.ts +102 -0
- package/dist/backend/services/organization-tree-service.d.ts.map +1 -0
- package/dist/backend/services/organization-tree-service.js +184 -0
- package/dist/backend/services/organization-tree-service.js.map +1 -0
- package/dist/backend/services/personal-organization-service.d.ts +130 -0
- package/dist/backend/services/personal-organization-service.d.ts.map +1 -0
- package/dist/backend/services/personal-organization-service.js +207 -0
- package/dist/backend/services/personal-organization-service.js.map +1 -0
- package/dist/backend/services/registration-service.d.ts +80 -0
- package/dist/backend/services/registration-service.d.ts.map +1 -0
- package/dist/backend/services/registration-service.js +126 -0
- package/dist/backend/services/registration-service.js.map +1 -0
- package/dist/backend/services/sales-rep-assignment-service.d.ts +89 -0
- package/dist/backend/services/sales-rep-assignment-service.d.ts.map +1 -0
- package/dist/backend/services/sales-rep-assignment-service.js +176 -0
- package/dist/backend/services/sales-rep-assignment-service.js.map +1 -0
- package/dist/backend/services/vat-validator-port.d.ts +20 -0
- package/dist/backend/services/vat-validator-port.d.ts.map +1 -0
- package/dist/backend/services/vat-validator-port.js +2 -0
- package/dist/backend/services/vat-validator-port.js.map +1 -0
- package/dist/manifest.d.ts +176 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +503 -0
- package/dist/manifest.js.map +1 -0
- package/dist/migrations/20260424T205317_organizations_init.d.ts +13 -0
- package/dist/migrations/20260424T205317_organizations_init.d.ts.map +1 -0
- package/dist/migrations/20260424T205317_organizations_init.js +100 -0
- package/dist/migrations/20260424T205317_organizations_init.js.map +1 -0
- package/dist/migrations/20260425T051700_organizations_invitations_init.d.ts +13 -0
- package/dist/migrations/20260425T051700_organizations_invitations_init.d.ts.map +1 -0
- package/dist/migrations/20260425T051700_organizations_invitations_init.js +39 -0
- package/dist/migrations/20260425T051700_organizations_invitations_init.js.map +1 -0
- package/dist/migrations/20260611T140349_organizations_consolidation.d.ts +35 -0
- package/dist/migrations/20260611T140349_organizations_consolidation.d.ts.map +1 -0
- package/dist/migrations/20260611T140349_organizations_consolidation.js +180 -0
- package/dist/migrations/20260611T140349_organizations_consolidation.js.map +1 -0
- package/dist/migrations/20260611T140358_organizations_org_order_confirmation_emails.d.ts +10 -0
- package/dist/migrations/20260611T140358_organizations_org_order_confirmation_emails.d.ts.map +1 -0
- package/dist/migrations/20260611T140358_organizations_org_order_confirmation_emails.js +14 -0
- package/dist/migrations/20260611T140358_organizations_org_order_confirmation_emails.js.map +1 -0
- package/dist/migrations/20260611T140402_organizations_org_fulfilment_strategy.d.ts +14 -0
- package/dist/migrations/20260611T140402_organizations_org_fulfilment_strategy.d.ts.map +1 -0
- package/dist/migrations/20260611T140402_organizations_org_fulfilment_strategy.js +20 -0
- package/dist/migrations/20260611T140402_organizations_org_fulfilment_strategy.js.map +1 -0
- package/dist/migrations/20260717T151403_organizations_personal_organizations.d.ts +24 -0
- package/dist/migrations/20260717T151403_organizations_personal_organizations.d.ts.map +1 -0
- package/dist/migrations/20260717T151403_organizations_personal_organizations.js +63 -0
- package/dist/migrations/20260717T151403_organizations_personal_organizations.js.map +1 -0
- package/dist/migrations/20260718T200340_organizations_organization_custom_field_values.d.ts +12 -0
- package/dist/migrations/20260718T200340_organizations_organization_custom_field_values.d.ts.map +1 -0
- package/dist/migrations/20260718T200340_organizations_organization_custom_field_values.js +16 -0
- package/dist/migrations/20260718T200340_organizations_organization_custom_field_values.js.map +1 -0
- package/dist/migrations/20260720T044254_organizations_org_hierarchy.d.ts +23 -0
- package/dist/migrations/20260720T044254_organizations_org_hierarchy.d.ts.map +1 -0
- package/dist/migrations/20260720T044254_organizations_org_hierarchy.js +37 -0
- package/dist/migrations/20260720T044254_organizations_org_hierarchy.js.map +1 -0
- package/dist/migrations/20260912T094646_organizations_sales_channel_organizations.d.ts +27 -0
- package/dist/migrations/20260912T094646_organizations_sales_channel_organizations.d.ts.map +1 -0
- package/dist/migrations/20260912T094646_organizations_sales_channel_organizations.js +44 -0
- package/dist/migrations/20260912T094646_organizations_sales_channel_organizations.js.map +1 -0
- package/dist/migrations/index.d.ts +35 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +45 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/ports/index.d.ts +53 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +2 -0
- package/dist/ports/index.js.map +1 -0
- package/docs/organization-hierarchy.md +117 -0
- package/docs/organizations.md +312 -0
- package/i18n/en.json +17 -0
- package/i18n/pl.json +17 -0
- package/package.json +107 -0
- package/tailwind.css +14 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
3
|
+
import { Link, useParams } from 'react-router-dom';
|
|
4
|
+
import { ArrowLeft } from 'lucide-react';
|
|
5
|
+
import { ApiError, apiClient, useUnsavedChangesPrompt, formatDateTime } from '@endora-commerce/admin-kit/lib';
|
|
6
|
+
import { FulfilmentStrategyPanel } from '../panels/FulfilmentStrategyPanel.js';
|
|
7
|
+
import { OrganizationSalesRepsTab } from '../components/OrganizationSalesRepsTab.js';
|
|
8
|
+
import { ModerationActionsPanel } from '../panels/ModerationActionsPanel.js';
|
|
9
|
+
import { ApplicablePriceListsPanel } from '../panels/ApplicablePriceListsPanel.js';
|
|
10
|
+
import { HierarchyPanel } from '../panels/HierarchyPanel.js';
|
|
11
|
+
import { VatValidationPanel } from '../panels/VatValidationPanel.js';
|
|
12
|
+
import { RestrictionsPanel } from '../panels/RestrictionsPanel.js';
|
|
13
|
+
import { CustomFieldValuesPanel } from '@endora-commerce/admin-kit/components';
|
|
14
|
+
import { AdminZone } from '@endora-commerce/admin-kit/zones';
|
|
15
|
+
import { Alert, AlertDescription, Button, Card, CardContent, CardHeader, CardTitle, Input, Label, PageHeader, Select, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@endora-commerce/admin-kit/ui';
|
|
16
|
+
import { useTranslation } from '@endora-commerce/admin-kit/i18n';
|
|
17
|
+
const STATUSES = ['pending_verification', 'active', 'blocked', 'rejected'];
|
|
18
|
+
const VAT_STATUSES = ['vat_payer', 'vat_exempt', 'reverse_charge'];
|
|
19
|
+
const ROLES = ['organization_admin', 'regular_user'];
|
|
20
|
+
export function OrganizationDetail() {
|
|
21
|
+
const t = useTranslation('core');
|
|
22
|
+
const { id = '' } = useParams();
|
|
23
|
+
const [org, setOrg] = useState(null);
|
|
24
|
+
const [warehouses, setWarehouses] = useState([]);
|
|
25
|
+
const [loading, setLoading] = useState(true);
|
|
26
|
+
const [error, setError] = useState(null);
|
|
27
|
+
const [info, setInfo] = useState(null);
|
|
28
|
+
const [inviteEmail, setInviteEmail] = useState('');
|
|
29
|
+
const [inviteRole, setInviteRole] = useState('regular_user');
|
|
30
|
+
const [directEmail, setDirectEmail] = useState('');
|
|
31
|
+
const [directFirst, setDirectFirst] = useState('');
|
|
32
|
+
const [directLast, setDirectLast] = useState('');
|
|
33
|
+
const [directPassword, setDirectPassword] = useState('');
|
|
34
|
+
const [directRole, setDirectRole] = useState('regular_user');
|
|
35
|
+
const [editMember, setEditMember] = useState(null);
|
|
36
|
+
const [editFirst, setEditFirst] = useState('');
|
|
37
|
+
const [editLast, setEditLast] = useState('');
|
|
38
|
+
const [editEmail, setEditEmail] = useState('');
|
|
39
|
+
const refresh = useCallback(async () => {
|
|
40
|
+
setLoading(true);
|
|
41
|
+
setError(null);
|
|
42
|
+
try {
|
|
43
|
+
const res = await apiClient.get(`/api/v1/admin/organizations/${id}`);
|
|
44
|
+
setOrg(res.data);
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
if (err instanceof ApiError && err.envelope.error.code === 'NOT_FOUND') {
|
|
48
|
+
setOrg(null);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
setError(err instanceof ApiError ? err.envelope.error.message : t('organizations.detail.error.load'));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
setLoading(false);
|
|
56
|
+
}
|
|
57
|
+
}, [id, t]);
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
void refresh();
|
|
60
|
+
}, [refresh]);
|
|
61
|
+
// Active warehouses feed the org-level fulfilment-strategy picker's
|
|
62
|
+
// defined-order list. Best-effort; failure leaves the list empty.
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
apiClient
|
|
65
|
+
.get('/api/v1/admin/warehouses?activeOnly=true&pageSize=200')
|
|
66
|
+
.then((res) => setWarehouses(res.items))
|
|
67
|
+
.catch(() => setWarehouses([]));
|
|
68
|
+
}, []);
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
if (editMember) {
|
|
71
|
+
setEditFirst(editMember.firstName);
|
|
72
|
+
setEditLast(editMember.lastName);
|
|
73
|
+
setEditEmail(editMember.email);
|
|
74
|
+
}
|
|
75
|
+
}, [editMember]);
|
|
76
|
+
// The member-edit overlay is the only deferred-save form on this page (the
|
|
77
|
+
// rest of the org fields persist immediately on change). Warn before leaving
|
|
78
|
+
// if it holds edits that haven't been saved yet.
|
|
79
|
+
const memberEditDirty = editMember !== null &&
|
|
80
|
+
(editFirst !== editMember.firstName ||
|
|
81
|
+
editLast !== editMember.lastName ||
|
|
82
|
+
editEmail !== editMember.email);
|
|
83
|
+
// The invite and direct-add forms also hold unsaved data-entry.
|
|
84
|
+
const inviteDirty = inviteEmail !== '';
|
|
85
|
+
const directAddDirty = directEmail !== '' || directFirst !== '' || directLast !== '' || directPassword !== '';
|
|
86
|
+
useUnsavedChangesPrompt(memberEditDirty || inviteDirty || directAddDirty);
|
|
87
|
+
const handlePatch = useCallback(async (patch) => {
|
|
88
|
+
if (!org?.updatedAt)
|
|
89
|
+
return;
|
|
90
|
+
try {
|
|
91
|
+
await apiClient.patch(`/api/v1/admin/organizations/${id}`, {
|
|
92
|
+
...patch,
|
|
93
|
+
expectedUpdatedAt: patch.expectedUpdatedAt ?? org.updatedAt,
|
|
94
|
+
});
|
|
95
|
+
setInfo(t('organizations.detail.info.saved'));
|
|
96
|
+
await refresh();
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
if (err instanceof ApiError && err.envelope.error.code === 'VERSION_CONFLICT') {
|
|
100
|
+
setError(t('organizations.detail.error.versionConflictOrg'));
|
|
101
|
+
await refresh();
|
|
102
|
+
setError(null);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
setError(err instanceof ApiError ? err.envelope.error.message : t('organizations.detail.error.save'));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}, [id, org, refresh, t]);
|
|
109
|
+
const inviteMember = useCallback(async () => {
|
|
110
|
+
if (!inviteEmail.trim())
|
|
111
|
+
return;
|
|
112
|
+
setError(null);
|
|
113
|
+
try {
|
|
114
|
+
await apiClient.post(`/api/v1/admin/organizations/${id}/members/invite`, {
|
|
115
|
+
email: inviteEmail.trim(),
|
|
116
|
+
role: inviteRole,
|
|
117
|
+
});
|
|
118
|
+
setInfo(t('organizations.detail.info.invited'));
|
|
119
|
+
setInviteEmail('');
|
|
120
|
+
await refresh();
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
setError(err instanceof ApiError ? err.envelope.error.message : t('organizations.detail.error.invite'));
|
|
124
|
+
}
|
|
125
|
+
}, [id, inviteEmail, inviteRole, refresh, t]);
|
|
126
|
+
const directAdd = useCallback(async () => {
|
|
127
|
+
setError(null);
|
|
128
|
+
try {
|
|
129
|
+
await apiClient.post(`/api/v1/admin/organizations/${id}/members`, {
|
|
130
|
+
email: directEmail.trim(),
|
|
131
|
+
firstName: directFirst.trim(),
|
|
132
|
+
lastName: directLast.trim(),
|
|
133
|
+
password: directPassword,
|
|
134
|
+
role: directRole,
|
|
135
|
+
});
|
|
136
|
+
setInfo(t('organizations.detail.info.memberCreated'));
|
|
137
|
+
setDirectEmail('');
|
|
138
|
+
setDirectFirst('');
|
|
139
|
+
setDirectLast('');
|
|
140
|
+
setDirectPassword('');
|
|
141
|
+
await refresh();
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
setError(err instanceof ApiError ? err.envelope.error.message : t('organizations.detail.error.create'));
|
|
145
|
+
}
|
|
146
|
+
}, [id, directEmail, directFirst, directLast, directPassword, directRole, refresh, t]);
|
|
147
|
+
const changeMemberRole = useCallback(async (memberId, role, expectedUpdatedAt) => {
|
|
148
|
+
setError(null);
|
|
149
|
+
try {
|
|
150
|
+
await apiClient.patch(`/api/v1/admin/organizations/${id}/members/${memberId}/role`, {
|
|
151
|
+
role,
|
|
152
|
+
...(expectedUpdatedAt ? { expectedUpdatedAt } : {}),
|
|
153
|
+
});
|
|
154
|
+
setInfo(t('organizations.detail.info.memberUpdated'));
|
|
155
|
+
await refresh();
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
if (err instanceof ApiError && err.envelope.error.code === 'VERSION_CONFLICT') {
|
|
159
|
+
setError(t('organizations.detail.error.versionConflictMember'));
|
|
160
|
+
await refresh();
|
|
161
|
+
setError(null);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
setError(err instanceof ApiError ? err.envelope.error.message : t('organizations.detail.error.roleUpdate'));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}, [id, refresh, t]);
|
|
168
|
+
const saveMemberProfile = useCallback(async () => {
|
|
169
|
+
if (!editMember?.updatedAt)
|
|
170
|
+
return;
|
|
171
|
+
setError(null);
|
|
172
|
+
try {
|
|
173
|
+
await apiClient.patch(`/api/v1/admin/organizations/${id}/members/${editMember.id}`, {
|
|
174
|
+
firstName: editFirst.trim(),
|
|
175
|
+
lastName: editLast.trim(),
|
|
176
|
+
email: editEmail.trim(),
|
|
177
|
+
expectedUpdatedAt: editMember.updatedAt,
|
|
178
|
+
});
|
|
179
|
+
setInfo(t('organizations.detail.info.profileSaved'));
|
|
180
|
+
setEditMember(null);
|
|
181
|
+
await refresh();
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
if (err instanceof ApiError && err.envelope.error.code === 'VERSION_CONFLICT') {
|
|
185
|
+
setError(t('organizations.detail.error.versionConflictMember'));
|
|
186
|
+
await refresh();
|
|
187
|
+
setError(null);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
setError(err instanceof ApiError ? err.envelope.error.message : t('organizations.detail.error.save'));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}, [editMember, editFirst, editLast, editEmail, id, refresh, t]);
|
|
194
|
+
const removeMember = useCallback(async (memberId) => {
|
|
195
|
+
setError(null);
|
|
196
|
+
try {
|
|
197
|
+
await apiClient.delete(`/api/v1/admin/organizations/${id}/members/${memberId}`);
|
|
198
|
+
setInfo(t('organizations.detail.info.memberRemoved'));
|
|
199
|
+
await refresh();
|
|
200
|
+
}
|
|
201
|
+
catch (err) {
|
|
202
|
+
setError(err instanceof ApiError ? err.envelope.error.message : t('organizations.detail.error.remove'));
|
|
203
|
+
}
|
|
204
|
+
}, [id, refresh, t]);
|
|
205
|
+
if (loading)
|
|
206
|
+
return _jsx("p", { className: "text-sm text-muted-foreground", children: t('organizations.loading') });
|
|
207
|
+
if (!org)
|
|
208
|
+
return (_jsx(Alert, { variant: "warning", children: _jsx(AlertDescription, { children: t('organizations.detail.notFound') }) }));
|
|
209
|
+
const adminCount = org.members.filter((m) => m.role === 'organization_admin').length;
|
|
210
|
+
return (_jsxs(_Fragment, { children: [_jsx(PageHeader, { title: org.name, description: _jsxs("span", { children: [t('organizations.detail.taxIdLabel'), " ", _jsx("code", { className: "font-mono text-xs", children: org.taxId }), org.updatedAt ? (_jsxs(_Fragment, { children: [' ', "\u00B7 ", t('organizations.detail.updatedLabel'), ' ', _jsx("time", { dateTime: org.updatedAt, children: formatDateTime(org.updatedAt) })] })) : null] }), actions: _jsx(Button, { asChild: true, variant: "outline", children: _jsxs(Link, { to: "/organizations", children: [_jsx(ArrowLeft, {}), t('organizations.detail.back')] }) }) }), error ? (_jsx(Alert, { variant: "destructive", className: "mb-4", children: _jsx(AlertDescription, { children: error }) })) : null, info ? (_jsx(Alert, { variant: "success", className: "mb-4", children: _jsx(AlertDescription, { children: info }) })) : null, _jsx("div", { className: "mb-4", children: _jsx(ModerationActionsPanel, { organizationId: org.id, status: org.status, version: org.version ?? 0, blockedReason: org.blockedReason ?? null, rejectedReason: org.rejectedReason ?? null, approvedAt: org.approvedAt ?? null, onChanged: refresh }) }), _jsxs(Card, { className: "mb-4", children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: t('organizations.detail.statusCard') }) }), _jsxs(CardContent, { className: "grid gap-4 md:grid-cols-2", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "ostatus", children: t('organizations.detail.accountStatus') }), _jsx(Select, { id: "ostatus", value: org.status, onChange: (e) => void handlePatch({
|
|
211
|
+
status: e.target.value,
|
|
212
|
+
...(org.updatedAt !== undefined ? { expectedUpdatedAt: org.updatedAt } : {}),
|
|
213
|
+
}), children: STATUSES.map((s) => (_jsx("option", { value: s, children: s }, s))) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "vstatus", children: t('organizations.detail.vatStatus') }), _jsx(Select, { id: "vstatus", value: org.vatStatus, onChange: (e) => void handlePatch({
|
|
214
|
+
vatStatus: e.target.value,
|
|
215
|
+
...(org.updatedAt !== undefined ? { expectedUpdatedAt: org.updatedAt } : {}),
|
|
216
|
+
}), children: VAT_STATUSES.map((v) => (_jsx("option", { value: v, children: v }, v))) })] }), _jsxs("div", { className: "space-y-2 md:col-span-2", children: [_jsx(Label, { htmlFor: "orderConfEmails", children: t('organizations.detail.orderConfirmationEmails') }), _jsx("textarea", { id: "orderConfEmails", "aria-label": "order-confirmation-emails", className: "min-h-20 w-full rounded-md border p-2 text-sm", defaultValue: (org.orderConfirmationEmails ?? []).join('\n'), placeholder: 'ops@example.com\nsales@example.com', onBlur: (e) => {
|
|
217
|
+
const emails = e.target.value
|
|
218
|
+
.split(/[\n,]/)
|
|
219
|
+
.map((s) => s.trim())
|
|
220
|
+
.filter(Boolean);
|
|
221
|
+
const current = org.orderConfirmationEmails ?? [];
|
|
222
|
+
if (emails.join('|') !== current.join('|')) {
|
|
223
|
+
void handlePatch({
|
|
224
|
+
orderConfirmationEmails: emails,
|
|
225
|
+
...(org.updatedAt !== undefined ? { expectedUpdatedAt: org.updatedAt } : {}),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
} }), _jsx("p", { className: "text-xs text-muted-foreground", children: t('organizations.detail.orderConfirmationEmailsHint') })] })] })] }), _jsxs(Card, { className: "mb-4", children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: t('organizations.detail.registeredAddress') }) }), _jsx(CardContent, { children: _jsxs("p", { className: "text-sm", children: [org.registeredAddress.street, _jsx("br", {}), org.registeredAddress.postalCode, " ", org.registeredAddress.city, _jsx("br", {}), org.registeredAddress.country] }) })] }), _jsxs(Card, { className: "mb-4", children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: t('organizations.detail.inviteCard') }) }), _jsxs(CardContent, { className: "flex flex-wrap items-end gap-3", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "invite-email", children: t('organizations.detail.email') }), _jsx(Input, { id: "invite-email", type: "email", value: inviteEmail, onChange: (e) => setInviteEmail(e.target.value), placeholder: t('organizations.detail.emailPlaceholder'), className: "w-64" })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "invite-role", children: t('organizations.detail.role') }), _jsx(Select, { id: "invite-role", value: inviteRole, onChange: (e) => setInviteRole(e.target.value), children: ROLES.map((r) => (_jsx("option", { value: r, children: r }, r))) })] }), _jsx(Button, { type: "button", onClick: () => void inviteMember(), children: t('organizations.detail.sendInvite') })] })] }), _jsxs(Card, { className: "mb-4", children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: t('organizations.detail.directAddCard') }) }), _jsxs(CardContent, { className: "grid gap-3 md:grid-cols-2", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "d-email", children: t('organizations.detail.email') }), _jsx(Input, { id: "d-email", type: "email", value: directEmail, onChange: (e) => setDirectEmail(e.target.value) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "d-pw", children: t('organizations.detail.tempPassword') }), _jsx(Input, { id: "d-pw", type: "password", value: directPassword, onChange: (e) => setDirectPassword(e.target.value), autoComplete: "new-password" })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "d-fn", children: t('organizations.detail.firstName') }), _jsx(Input, { id: "d-fn", value: directFirst, onChange: (e) => setDirectFirst(e.target.value) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "d-ln", children: t('organizations.detail.lastName') }), _jsx(Input, { id: "d-ln", value: directLast, onChange: (e) => setDirectLast(e.target.value) })] }), _jsxs("div", { className: "space-y-2 md:col-span-2", children: [_jsx(Label, { htmlFor: "d-role", children: t('organizations.detail.role') }), _jsx(Select, { id: "d-role", value: directRole, onChange: (e) => setDirectRole(e.target.value), children: ROLES.map((r) => (_jsx("option", { value: r, children: r }, r))) })] }), _jsx("div", { className: "md:col-span-2", children: _jsx(Button, { type: "button", onClick: () => void directAdd(), children: t('organizations.detail.createMember') }) })] })] }), _jsxs(Card, { className: "mb-4", children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: t('organizations.detail.membersCard') }) }), _jsxs(CardContent, { children: [editMember ? (_jsxs("div", { className: "mb-6 rounded-lg border border-border p-4", children: [_jsx("h3", { className: "mb-3 text-sm font-medium", children: t('organizations.detail.editMember') }), _jsxs("div", { className: "grid gap-3 md:grid-cols-2", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "edit-email", children: t('organizations.detail.email') }), _jsx(Input, { id: "edit-email", type: "email", value: editEmail, onChange: (e) => setEditEmail(e.target.value), autoComplete: "off" })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "edit-fn", children: t('organizations.detail.firstName') }), _jsx(Input, { id: "edit-fn", value: editFirst, onChange: (e) => setEditFirst(e.target.value) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "edit-ln", children: t('organizations.detail.lastName') }), _jsx(Input, { id: "edit-ln", value: editLast, onChange: (e) => setEditLast(e.target.value) })] })] }), _jsxs("div", { className: "mt-4 flex flex-wrap gap-2", children: [_jsx(Button, { type: "button", onClick: () => void saveMemberProfile(), children: t('organizations.detail.save') }), _jsx(Button, { type: "button", variant: "outline", onClick: () => setEditMember(null), children: t('organizations.detail.cancel') })] }), _jsx("p", { className: "mt-2 text-xs text-muted-foreground", children: t('organizations.detail.changeEmailHint') })] })) : null, _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: t('organizations.detail.email') }), _jsx(TableHead, { children: t('organizations.detail.nameCol') }), _jsx(TableHead, { children: t('organizations.detail.role') }), _jsx(TableHead, { children: t('organizations.detail.verified') }), _jsx(TableHead, { children: t('organizations.detail.lastLogin') }), _jsx(TableHead, { children: t('organizations.detail.twoFactor') }), _jsx(TableHead, { className: "text-right", children: t('organizations.detail.actions') })] }) }), _jsx(TableBody, { children: org.members.map((m) => (_jsxs(TableRow, { children: [_jsx(TableCell, { className: "font-medium", children: m.email }), _jsxs(TableCell, { children: [m.firstName, " ", m.lastName] }), _jsx(TableCell, { children: _jsx(Select, { "aria-label": t('organizations.detail.roleForLabel', { email: m.email }), value: m.role, onChange: (e) => void changeMemberRole(m.id, e.target.value, m.updatedAt ?? undefined), className: "max-w-[14rem]", children: ROLES.map((r) => (_jsx("option", { value: r, children: r }, r))) }) }), _jsx(TableCell, { children: m.emailVerifiedAt ? formatDateTime(m.emailVerifiedAt) : '—' }), _jsx(TableCell, { children: m.lastLoginAt ? formatDateTime(m.lastLoginAt) : '—' }), _jsx(TableCell, { children: m.twoFactorEnabled ? t('organizations.detail.twoFactorOn') : '—' }), _jsxs(TableCell, { className: "text-right space-x-2", children: [_jsx(Button, { type: "button", variant: "secondary", size: "sm", onClick: () => setEditMember(m), children: t('organizations.detail.edit') }), _jsx(Button, { type: "button", variant: "outline", size: "sm", disabled: m.role === 'organization_admin' && adminCount <= 1, onClick: () => void removeMember(m.id), children: t('organizations.detail.remove') })] })] }, m.id))) })] })] })] }), _jsx(AdminZone, { name: "organization.detail.after", props: { organizationId: org.id } }), _jsx(HierarchyPanel, { organizationId: org.id, parentId: org.parentId ?? null, onChanged: refresh }), _jsx("div", { className: "mt-4", children: _jsx(RestrictionsPanel, { organizationId: org.id, version: org.version ?? 0, onChanged: refresh }) }), _jsx("div", { className: "mt-4", children: _jsx(VatValidationPanel, { organizationId: org.id, summary: {
|
|
229
|
+
outcome: org.vatValidation?.outcome ?? null,
|
|
230
|
+
provider: org.vatValidation?.provider ?? null,
|
|
231
|
+
validatedAt: org.vatValidation?.validatedAt ?? null,
|
|
232
|
+
}, onChanged: refresh }) }), _jsx("div", { className: "mt-4", children: _jsx(FulfilmentStrategyPanel, { initial: {
|
|
233
|
+
strategy: org.fulfilmentStrategy ?? null,
|
|
234
|
+
warehouseOrder: org.fulfilmentStrategyWarehouseOrder ?? [],
|
|
235
|
+
}, warehouses: warehouses.map((w) => ({ id: w.id, code: w.code, name: w.name })), onSave: (value) => handlePatch({
|
|
236
|
+
fulfilmentStrategy: value.strategy,
|
|
237
|
+
fulfilmentStrategyWarehouseOrder: value.strategy === 'defined_order' ? value.warehouseOrder : null,
|
|
238
|
+
...(org.updatedAt !== undefined ? { expectedUpdatedAt: org.updatedAt } : {}),
|
|
239
|
+
}) }, org.updatedAt ?? org.id) }), _jsx("div", { className: "mt-4", children: _jsx(ApplicablePriceListsPanel, { organizationId: org.id }) }), _jsx("div", { className: "mt-4", children: _jsx(CustomFieldValuesPanel, { entityType: "organization", values: org.customFieldValues ?? {}, save: (values) => handlePatch({ customFieldValues: values }) }) }), id ? _jsx(OrganizationSalesRepsTab, { organizationId: id }) : null] }));
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* The registry loads a route component through a dynamic-import factory and
|
|
243
|
+
* reads its default export (feature 091, FR-013). The named export stays: it is
|
|
244
|
+
* the spelling this module's own code and its tests use.
|
|
245
|
+
*/
|
|
246
|
+
export default OrganizationDetail;
|
|
247
|
+
//# sourceMappingURL=OrganizationDetail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrganizationDetail.js","sourceRoot":"","sources":["../../../src/admin/pages/OrganizationDetail.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export declare function OrganizationsList(): ReactNode;
|
|
3
|
+
/**
|
|
4
|
+
* The registry loads a route component through a dynamic-import factory and
|
|
5
|
+
* reads its default export (feature 091, FR-013). The named export stays: it is
|
|
6
|
+
* the spelling this module's own code and its tests use.
|
|
7
|
+
*/
|
|
8
|
+
export default OrganizationsList;
|
|
9
|
+
//# sourceMappingURL=OrganizationsList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrganizationsList.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/OrganizationsList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAmBzE,wBAAgB,iBAAiB,IAAI,SAAS,CAuH7C;AAED;;;;GAIG;AACH,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
3
|
+
import { Link } from 'react-router-dom';
|
|
4
|
+
import { ArrowRight } from 'lucide-react';
|
|
5
|
+
import { ApiError, apiClient, formatDateTime } from '@endora-commerce/admin-kit/lib';
|
|
6
|
+
import { Alert, AlertDescription, Button, Card, CardContent, Input, Label, PageHeader, Select } from '@endora-commerce/admin-kit/ui';
|
|
7
|
+
import { OrganizationStatusBadge, ResponsiveTable } from '@endora-commerce/admin-kit/components';
|
|
8
|
+
import { useTranslation } from '@endora-commerce/admin-kit/i18n';
|
|
9
|
+
const STATUSES = ['pending_verification', 'active', 'blocked', 'rejected'];
|
|
10
|
+
export function OrganizationsList() {
|
|
11
|
+
const t = useTranslation('core');
|
|
12
|
+
const [rows, setRows] = useState([]);
|
|
13
|
+
const [loading, setLoading] = useState(true);
|
|
14
|
+
const [error, setError] = useState(null);
|
|
15
|
+
const [status, setStatus] = useState('');
|
|
16
|
+
const [q, setQ] = useState('');
|
|
17
|
+
const refresh = useCallback(async () => {
|
|
18
|
+
setLoading(true);
|
|
19
|
+
setError(null);
|
|
20
|
+
try {
|
|
21
|
+
const params = new URLSearchParams();
|
|
22
|
+
if (status)
|
|
23
|
+
params.set('filter[status]', status);
|
|
24
|
+
if (q)
|
|
25
|
+
params.set('q', q);
|
|
26
|
+
const path = '/api/v1/admin/organizations' + (params.toString() ? `?${params.toString()}` : '');
|
|
27
|
+
const res = await apiClient.get(path);
|
|
28
|
+
setRows(res.data);
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
setError(err instanceof ApiError ? err.envelope.error.message : t('organizations.error.load'));
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
setLoading(false);
|
|
35
|
+
}
|
|
36
|
+
}, [status, q, t]);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
void refresh();
|
|
39
|
+
}, [refresh]);
|
|
40
|
+
return (_jsxs(_Fragment, { children: [_jsx(PageHeader, { title: t('organizations.page.title'), description: t('organizations.page.description') }), error ? (_jsx(Alert, { variant: "destructive", className: "mb-4", children: _jsx(AlertDescription, { children: error }) })) : null, _jsx(Card, { className: "mb-4", children: _jsxs(CardContent, { className: "grid gap-4 pt-6 md:grid-cols-2", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "ostatus", children: t('organizations.field.status') }), _jsxs(Select, { id: "ostatus", value: status, onChange: (e) => setStatus(e.target.value), children: [_jsx("option", { value: "", children: t('organizations.filter.all') }), STATUSES.map((s) => (_jsx("option", { value: s, children: s }, s)))] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "oq", children: t('organizations.field.search') }), _jsx(Input, { id: "oq", value: q, onChange: (e) => setQ(e.target.value) })] })] }) }), _jsx(Card, { children: _jsx(CardContent, { className: "pt-6", children: loading ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('organizations.loading') })) : rows.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('organizations.empty') })) : (_jsx(ResponsiveTable, { data: rows, keyExtractor: (o) => o.id, columns: [
|
|
41
|
+
{
|
|
42
|
+
id: 'name',
|
|
43
|
+
header: t('organizations.column.name'),
|
|
44
|
+
primary: true,
|
|
45
|
+
render: (o) => _jsx("span", { className: "font-medium", children: o.name }),
|
|
46
|
+
meta: (o) => (_jsx("span", { className: "font-mono text-xs text-muted-foreground", children: o.taxId })),
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: 'status',
|
|
50
|
+
header: t('organizations.column.status'),
|
|
51
|
+
render: (o) => _jsx(OrganizationStatusBadge, { status: o.status }),
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
id: 'vat',
|
|
55
|
+
header: t('organizations.column.vat'),
|
|
56
|
+
hideOnMobile: true,
|
|
57
|
+
render: (o) => o.vatStatus,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: 'registered',
|
|
61
|
+
header: t('organizations.column.registered'),
|
|
62
|
+
hideOnMobile: true,
|
|
63
|
+
render: (o) => formatDateTime(o.createdAt),
|
|
64
|
+
},
|
|
65
|
+
], renderActions: (o) => (_jsx(Button, { asChild: true, variant: "outline", size: "sm", className: "min-h-11", children: _jsxs(Link, { to: `/organizations/${o.id}`, children: [t('organizations.action.open'), _jsx(ArrowRight, {})] }) })) })) }) })] }));
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The registry loads a route component through a dynamic-import factory and
|
|
69
|
+
* reads its default export (feature 091, FR-013). The named export stays: it is
|
|
70
|
+
* the spelling this module's own code and its tests use.
|
|
71
|
+
*/
|
|
72
|
+
export default OrganizationsList;
|
|
73
|
+
//# sourceMappingURL=OrganizationsList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrganizationsList.js","sourceRoot":"","sources":["../../../src/admin/pages/OrganizationsList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface ApplicablePriceListsPanelProps {
|
|
3
|
+
organizationId: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Read-only panel on the OrganizationDetail page listing every Price
|
|
7
|
+
* List that currently applies to the Organization, each tagged with the
|
|
8
|
+
* reasons it applies (direct match / customer-group / channel inheritance
|
|
9
|
+
* / segment-rule). Surface for feature 026 US5 FR-017.
|
|
10
|
+
*/
|
|
11
|
+
export declare function ApplicablePriceListsPanel(props: ApplicablePriceListsPanelProps): ReactNode;
|
|
12
|
+
//# sourceMappingURL=ApplicablePriceListsPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApplicablePriceListsPanel.d.ts","sourceRoot":"","sources":["../../../src/admin/panels/ApplicablePriceListsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAkBzE,MAAM,WAAW,8BAA8B;IAC7C,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,8BAA8B,GAAG,SAAS,CA8E1F"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
3
|
+
import { ApiError, apiClient } from '@endora-commerce/admin-kit/lib';
|
|
4
|
+
import { Alert, AlertDescription, Card, CardContent, CardHeader, CardTitle, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@endora-commerce/admin-kit/ui';
|
|
5
|
+
import { useTranslation } from '@endora-commerce/admin-kit/i18n';
|
|
6
|
+
/**
|
|
7
|
+
* Read-only panel on the OrganizationDetail page listing every Price
|
|
8
|
+
* List that currently applies to the Organization, each tagged with the
|
|
9
|
+
* reasons it applies (direct match / customer-group / channel inheritance
|
|
10
|
+
* / segment-rule). Surface for feature 026 US5 FR-017.
|
|
11
|
+
*/
|
|
12
|
+
export function ApplicablePriceListsPanel(props) {
|
|
13
|
+
const t = useTranslation('core');
|
|
14
|
+
const [items, setItems] = useState([]);
|
|
15
|
+
const [loading, setLoading] = useState(true);
|
|
16
|
+
const [error, setError] = useState(null);
|
|
17
|
+
const refresh = useCallback(async () => {
|
|
18
|
+
setLoading(true);
|
|
19
|
+
setError(null);
|
|
20
|
+
try {
|
|
21
|
+
const res = await apiClient.get(`/api/v1/admin/organizations/${props.organizationId}/applicable-price-lists`);
|
|
22
|
+
setItems(res.items);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
setError(err instanceof ApiError
|
|
26
|
+
? err.envelope.error.message
|
|
27
|
+
: t('organizations.applicablePriceLists.error.load'));
|
|
28
|
+
setItems([]);
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
setLoading(false);
|
|
32
|
+
}
|
|
33
|
+
}, [props.organizationId, t]);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
void refresh();
|
|
36
|
+
}, [refresh]);
|
|
37
|
+
return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: t('organizations.applicablePriceLists.title') }) }), _jsxs(CardContent, { children: [error ? (_jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: error }) })) : null, loading && !error ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('common.state.loading') })) : null, !loading && !error && items.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('organizations.applicablePriceLists.empty') })) : null, !loading && !error && items.length > 0 ? (_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: t('organizations.applicablePriceLists.column.name') }), _jsx(TableHead, { children: t('organizations.applicablePriceLists.column.priority') }), _jsx(TableHead, { children: t('organizations.applicablePriceLists.column.reasons') })] }) }), _jsx(TableBody, { children: items.map((it) => (_jsxs(TableRow, { children: [_jsx(TableCell, { className: "font-medium", children: it.name }), _jsx(TableCell, { children: it.priority }), _jsx(TableCell, { children: _jsx("div", { className: "flex flex-wrap gap-1", children: it.reasons.map((r) => (_jsx(ReasonChip, { reason: r }, r))) }) })] }, it.priceListId))) })] })) : null] })] }));
|
|
38
|
+
}
|
|
39
|
+
function ReasonChip({ reason }) {
|
|
40
|
+
const t = useTranslation('core');
|
|
41
|
+
const palette = {
|
|
42
|
+
direct_organization_match: 'bg-emerald-100 text-emerald-900 border-emerald-300',
|
|
43
|
+
customer_group_match: 'bg-sky-100 text-sky-900 border-sky-300',
|
|
44
|
+
sales_channel_inheritance: 'bg-violet-100 text-violet-900 border-violet-300',
|
|
45
|
+
segment_rule_match: 'bg-slate-100 text-slate-900 border-slate-300',
|
|
46
|
+
};
|
|
47
|
+
return (_jsx("span", { className: `inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium ${palette[reason]}`, children: t(`organizations.applicablePriceLists.reason.${reason}`) }));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=ApplicablePriceListsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApplicablePriceListsPanel.js","sourceRoot":"","sources":["../../../src/admin/panels/ApplicablePriceListsPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type FulfilmentStrategyValue, type FulfilmentWarehouseOption } from '@endora-commerce/admin-kit/components';
|
|
3
|
+
/**
|
|
4
|
+
* Organization-level fulfilment-strategy override (precedence: Product →
|
|
5
|
+
* Organization → Sales Channel → platform default). Self-contained draft +
|
|
6
|
+
* Save; persistence is delegated to `onSave` so the parent owns the PATCH and
|
|
7
|
+
* its optimistic-lock token. Remount (via `key`) to reset the draft after a
|
|
8
|
+
* successful refresh.
|
|
9
|
+
*/
|
|
10
|
+
export interface FulfilmentStrategyPanelProps {
|
|
11
|
+
initial: FulfilmentStrategyValue;
|
|
12
|
+
warehouses: FulfilmentWarehouseOption[];
|
|
13
|
+
onSave: (value: FulfilmentStrategyValue) => Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export declare function FulfilmentStrategyPanel({ initial, warehouses, onSave, }: FulfilmentStrategyPanelProps): ReactNode;
|
|
16
|
+
//# sourceMappingURL=FulfilmentStrategyPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FulfilmentStrategyPanel.d.ts","sourceRoot":"","sources":["../../../src/admin/panels/FulfilmentStrategyPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG9D,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC/B,MAAM,uCAAuC,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,uBAAuB,CAAC;IACjC,UAAU,EAAE,yBAAyB,EAAE,CAAC;IACxC,MAAM,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED,wBAAgB,uBAAuB,CAAC,EACtC,OAAO,EACP,UAAU,EACV,MAAM,GACP,EAAE,4BAA4B,GAAG,SAAS,CA8C1C"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useState } from 'react';
|
|
3
|
+
import { Alert, AlertDescription, Button, Card, CardContent, CardHeader, CardTitle } from '@endora-commerce/admin-kit/ui';
|
|
4
|
+
import { useTranslation } from '@endora-commerce/admin-kit/i18n';
|
|
5
|
+
import { FulfilmentStrategyPicker, } from '@endora-commerce/admin-kit/components';
|
|
6
|
+
export function FulfilmentStrategyPanel({ initial, warehouses, onSave, }) {
|
|
7
|
+
const t = useTranslation('core');
|
|
8
|
+
const [value, setValue] = useState(initial);
|
|
9
|
+
const [busy, setBusy] = useState(false);
|
|
10
|
+
const [error, setError] = useState(null);
|
|
11
|
+
const handleSave = useCallback(async () => {
|
|
12
|
+
setBusy(true);
|
|
13
|
+
setError(null);
|
|
14
|
+
try {
|
|
15
|
+
await onSave({
|
|
16
|
+
strategy: value.strategy,
|
|
17
|
+
warehouseOrder: value.strategy === 'defined_order' ? value.warehouseOrder : [],
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
setError(t('fulfilment.saveError'));
|
|
22
|
+
}
|
|
23
|
+
finally {
|
|
24
|
+
setBusy(false);
|
|
25
|
+
}
|
|
26
|
+
}, [onSave, value, t]);
|
|
27
|
+
return (_jsxs(Card, { className: "mb-4", children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: t('fulfilment.orgTitle') }) }), _jsxs(CardContent, { className: "space-y-3", children: [_jsx(FulfilmentStrategyPicker, { value: value, onChange: setValue, warehouses: warehouses, allowInherit: true, disabled: busy, idPrefix: "org-fulfilment" }), error ? (_jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: error }) })) : null, _jsx(Button, { size: "sm", disabled: busy, onClick: () => void handleSave(), children: busy ? t('fulfilment.saving') : t('fulfilment.save') })] })] }));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=FulfilmentStrategyPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FulfilmentStrategyPanel.js","sourceRoot":"","sources":["../../../src/admin/panels/FulfilmentStrategyPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1H,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EACL,wBAAwB,GAGzB,MAAM,uCAAuC,CAAC;AAe/C,MAAM,UAAU,uBAAuB,CAAC,EACtC,OAAO,EACP,UAAU,EACV,MAAM,GACuB;IAC7B,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAA0B,OAAO,CAAC,CAAC;IACrE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,IAAmB,EAAE;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,MAAM,MAAM,CAAC;gBACX,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,cAAc,EAAE,KAAK,CAAC,QAAQ,KAAK,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;aAC/E,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACtC,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAEvB,OAAO,CACL,MAAC,IAAI,IAAC,SAAS,EAAC,MAAM,aACpB,KAAC,UAAU,cACT,KAAC,SAAS,cAAE,CAAC,CAAC,qBAAqB,CAAC,GAAa,GACtC,EACb,MAAC,WAAW,IAAC,SAAS,EAAC,WAAW,aAChC,KAAC,wBAAwB,IACvB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,YAAY,QACZ,QAAQ,EAAE,IAAI,EACd,QAAQ,EAAC,gBAAgB,GACzB,EACD,KAAK,CAAC,CAAC,CAAC,CACP,KAAC,KAAK,IAAC,OAAO,EAAC,aAAa,YAC1B,KAAC,gBAAgB,cAAE,KAAK,GAAoB,GACtC,CACT,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAS,EAAE,CAAC,KAAK,UAAU,EAAE,YACrE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAC9C,IACG,IACT,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface HierarchyPanelProps {
|
|
3
|
+
organizationId: string;
|
|
4
|
+
/** Current parent id (null ⇒ root). */
|
|
5
|
+
parentId: string | null;
|
|
6
|
+
onChanged: () => void | Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Feature 056 US1 — organization hierarchy editor. Reuses the shared
|
|
10
|
+
* OrganizationPicker to assign / move / detach the parent (through the
|
|
11
|
+
* Command-Bus-backed `POST /:id/parent` endpoint), and renders the ancestor
|
|
12
|
+
* chain + the pre-order subtree.
|
|
13
|
+
*/
|
|
14
|
+
export declare function HierarchyPanel(props: HierarchyPanelProps): ReactNode;
|
|
15
|
+
//# sourceMappingURL=HierarchyPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HierarchyPanel.d.ts","sourceRoot":"","sources":["../../../src/admin/panels/HierarchyPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAczE,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,SAAS,CAqIpE"}
|