From e0c6590cb4a2bde1d5adbb3fe1bb4b3da8ee6c8d Mon Sep 17 00:00:00 2001 From: Alan Vezina Date: Thu, 8 Jan 2026 14:28:24 -0600 Subject: [PATCH 1/4] EditableDetailPanel: use useRouteLeave (#1921) This fixes GH Issue 723 --- packages/components/package-lock.json | 4 ++-- packages/components/package.json | 2 +- .../components/releaseNotes/components.md | 5 +++++ .../public/QueryModel/EditableDetailPanel.tsx | 19 ++++++++++++++----- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index 08e20f7140..d99ad12484 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "7.7.3", + "version": "7.7.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "7.7.3", + "version": "7.7.4", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/packages/components/package.json b/packages/components/package.json index ae0ca2eba2..fdb3cebc7f 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "7.7.3", + "version": "7.7.4", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [ diff --git a/packages/components/releaseNotes/components.md b/packages/components/releaseNotes/components.md index f50cafc6d6..fc3565b0bc 100644 --- a/packages/components/releaseNotes/components.md +++ b/packages/components/releaseNotes/components.md @@ -1,6 +1,11 @@ # @labkey/components Components, models, actions, and utility functions for LabKey applications and pages +### version 7.7.4 +*Released*: 8 January 2026 +- [GitHub Issue #723](https://github.com/LabKey/internal-issues/issues/723) + - EditableDetailPanel: use `useRouteLeave` + ### version 7.7.3 *Released*: 31 December 2025 - [GitHub Issue #495](https://github.com/LabKey/internal-issues/issues/495) diff --git a/packages/components/src/public/QueryModel/EditableDetailPanel.tsx b/packages/components/src/public/QueryModel/EditableDetailPanel.tsx index a936c09781..6bbe16abfb 100644 --- a/packages/components/src/public/QueryModel/EditableDetailPanel.tsx +++ b/packages/components/src/public/QueryModel/EditableDetailPanel.tsx @@ -22,6 +22,7 @@ import { QueryModel } from './QueryModel'; import { DetailPanel, DetailPanelWithModel } from './DetailPanel'; import { EDIT_METHOD } from '../../internal/constants'; +import { useRouteLeave } from '../../internal/util/RouteLeave'; export interface EditableDetailPanelProps { appEditable?: boolean; @@ -71,6 +72,7 @@ export const EditableDetailPanel: FC = props => { } = props; const { api } = useAppContext(); + const [_, setIsDirty] = useRouteLeave(); const [canSubmit, setCanSubmit] = useState(false); const [editing, setEditing] = useState(false); const [error, setError] = useState(undefined); @@ -90,10 +92,11 @@ export const EditableDetailPanel: FC = props => { const toggleEditing = useCallback((): void => { const updated = !editing; setEditing(updated); + setIsDirty(false); setWarning(undefined); setError(undefined); onEditToggle?.(updated); - }, [editing, onEditToggle]); + }, [editing, onEditToggle, setIsDirty]); const disableSubmitButton = useCallback((): void => { setCanSubmit(false); @@ -103,9 +106,13 @@ export const EditableDetailPanel: FC = props => { setCanSubmit(true); }, []); - const handleFormChange = useCallback((): void => { - setWarning(undefined); - }, []); + const handleFormChange = useCallback( + (_: never, isChanged: boolean): void => { + setWarning(undefined); + if (isChanged) setIsDirty(true); + }, + [setIsDirty] + ); const fileInputRenderer = useCallback((col: QueryColumn, data: any): ReactNode => { return ; @@ -121,6 +128,7 @@ export const EditableDetailPanel: FC = props => { setCanSubmit(false); setError(undefined); setWarning('No changes detected. Please update the form and click save.'); + setIsDirty(false); return; } @@ -146,6 +154,7 @@ export const EditableDetailPanel: FC = props => { auditUserComment: comment, }); + setIsDirty(false); setEditing(false); onUpdate?.(); onEditToggle?.(false); @@ -154,7 +163,7 @@ export const EditableDetailPanel: FC = props => { setWarning(undefined); } }, - [model, onBeforeUpdate, api.query, containerPath, comment, onUpdate, onEditToggle] + [model, onBeforeUpdate, api.query, containerPath, comment, onUpdate, onEditToggle, setIsDirty] ); const isEditable = !model.isLoading && model.hasRows && (model.queryInfo?.isAppEditable() || appEditable); From dead883b9e14d5b6d7dc349814946029d6cbc166 Mon Sep 17 00:00:00 2001 From: Susan Hert Date: Thu, 22 Jan 2026 17:57:24 -0800 Subject: [PATCH 2/4] Issue 798: Task filtering for jobs should be available for LIMS products only (#1926) --- packages/components/package-lock.json | 4 +-- packages/components/package.json | 2 +- .../components/releaseNotes/components.md | 4 +++ packages/components/src/index.ts | 4 +++ .../components/src/internal/app/constants.ts | 1 + packages/components/src/internal/app/utils.ts | 7 ++++ .../src/internal/productFixtures.ts | 35 ++++++++++++++----- 7 files changed, 46 insertions(+), 11 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index d99ad12484..4123c6ff09 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "7.7.4", + "version": "7.7.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "7.7.4", + "version": "7.7.5", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/packages/components/package.json b/packages/components/package.json index fdb3cebc7f..51c01d530d 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "7.7.4", + "version": "7.7.5", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [ diff --git a/packages/components/releaseNotes/components.md b/packages/components/releaseNotes/components.md index fc3565b0bc..7f165fdd73 100644 --- a/packages/components/releaseNotes/components.md +++ b/packages/components/releaseNotes/components.md @@ -1,6 +1,10 @@ # @labkey/components Components, models, actions, and utility functions for LabKey applications and pages +### version 7.7.5 +*Released*: 22 January 2026 +- [GitHub Issue #798](https://github.com/LabKey/internal-issues/issues/798) - add product feature flag for advanced workflow + ### version 7.7.4 *Released*: 8 January 2026 - [GitHub Issue #723](https://github.com/LabKey/internal-issues/issues/723) diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts index 0549a3b02a..0a408789e3 100644 --- a/packages/components/src/index.ts +++ b/packages/components/src/index.ts @@ -738,6 +738,7 @@ import { isSharedContainer, isSourceTypeEnabled, isWorkflowEnabled, + isAdvancedWorkflowEnabled, setFolderDataExclusion, setProductFolders, useMenuSectionConfigs, @@ -853,6 +854,7 @@ import { TEST_BIO_LIMS_ENTERPRISE_MODULE_CONTEXT, TEST_BIO_LIMS_STARTER_MODULE_CONTEXT, TEST_LKS_STARTER_MODULE_CONTEXT, + TEST_LK_LIMS_MODULE_CONTEXT, TEST_LKSM_PROFESSIONAL_MODULE_CONTEXT, TEST_LKSM_STARTER_AND_WORKFLOW_MODULE_CONTEXT, TEST_LKSM_STARTER_MODULE_CONTEXT, @@ -931,6 +933,7 @@ const App = { isConditionalFormattingEnabled, isMediaEnabled, isWorkflowEnabled, + isAdvancedWorkflowEnabled, isELNEnabled, isFreezerManagementEnabled, isPlatesEnabled, @@ -1055,6 +1058,7 @@ const App = { TEST_LKSM_STARTER_MODULE_CONTEXT, TEST_LKSM_STARTER_AND_WORKFLOW_MODULE_CONTEXT, TEST_LKSM_PROFESSIONAL_MODULE_CONTEXT, + TEST_LK_LIMS_MODULE_CONTEXT, TEST_PROJECT, TEST_PROJECT_CONTAINER, TEST_PROJECT_CONTAINER_ADMIN, diff --git a/packages/components/src/internal/app/constants.ts b/packages/components/src/internal/app/constants.ts index 531745460c..07131d83fd 100644 --- a/packages/components/src/internal/app/constants.ts +++ b/packages/components/src/internal/app/constants.ts @@ -120,6 +120,7 @@ export const BASE_APP_HELP_LINK = 'https://www.labkey.org/SampleManagerHelp/wiki // The enum values here should align with the ProductFeature.java enum values (some not currently used but included for completeness) export enum ProductFeature { + AdvancedWorkflow = 'AdvancedWorkflow', ApiKeys = 'ApiKeys', Assay = 'Assay', AssayQC = 'AssayQC', diff --git a/packages/components/src/internal/app/utils.ts b/packages/components/src/internal/app/utils.ts index 7951db1094..daefea1f7f 100644 --- a/packages/components/src/internal/app/utils.ts +++ b/packages/components/src/internal/app/utils.ts @@ -384,6 +384,13 @@ export function isWorkflowEnabled(moduleContext?: ModuleContext): boolean { ); } +export function isAdvancedWorkflowEnabled(moduleContext?: ModuleContext): boolean { + return ( + hasModule(SAMPLE_MANAGER_APP_PROPERTIES.moduleName, moduleContext) && + isFeatureEnabled(ProductFeature.AdvancedWorkflow, moduleContext) + ); +} + export function isDataChangeCommentRequirementFeatureEnabled(moduleContext?: ModuleContext): boolean { return isFeatureEnabled(ProductFeature.DataChangeCommentRequirement, moduleContext); } diff --git a/packages/components/src/internal/productFixtures.ts b/packages/components/src/internal/productFixtures.ts index 4db20a445d..ad0108e811 100644 --- a/packages/components/src/internal/productFixtures.ts +++ b/packages/components/src/internal/productFixtures.ts @@ -1,17 +1,36 @@ import { BIOLOGICS_APP_PROPERTIES, FREEZER_MANAGER_APP_PROPERTIES, + LIMS_APP_PROPERTIES, ProductFeature, SAMPLE_MANAGER_APP_PROPERTIES, } from './app/constants'; -import { - BIOLOGICS_ENTERPRISE_PRODUCT_KEY, - BIOLOGICS_PRODUCT_ID, - BIOLOGICS_STARTER_PRODUCT_KEY, - SAMPLE_MANAGER_PRODUCT_ID, - SAMPLE_MANAGER_PROFESSIONAL_PRODUCT_KEY, - SAMPLE_MANAGER_STARTER_PRODUCT_KEY -} from './app/products'; +import { BIOLOGICS_PRODUCT_ID, LIMS_PRODUCT_ID, SAMPLE_MANAGER_PRODUCT_ID } from './app/products'; + +export const TEST_LK_LIMS_MODULE_CONTEXT = { + api: { + moduleNames: ['samplemanagement', 'inventory', 'assay', 'labbook'], + }, + samplemanagement: { + productId: LIMS_APP_PROPERTIES.productId, + }, + inventory: { + productId: FREEZER_MANAGER_APP_PROPERTIES.productId, + }, + core: { + productFeatures: [ + ProductFeature.Workflow, + ProductFeature.ELN, + ProductFeature.Assay, + ProductFeature.ApiKeys, + ProductFeature.CalculatedFields, + ProductFeature.DataChangeCommentRequirement, + ProductFeature.CustomImportTemplates, + ProductFeature.AdvancedWorkflow, + ], + primaryApplicationId: LIMS_PRODUCT_ID, + } +}; export const TEST_LKSM_PROFESSIONAL_MODULE_CONTEXT = { api: { From 89fbc3af12036e45209df3772f84d0c865577c3e Mon Sep 17 00:00:00 2001 From: cnathe Date: Mon, 26 Jan 2026 13:56:47 -0600 Subject: [PATCH 3/4] update release notes --- packages/components/releaseNotes/components.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/components/releaseNotes/components.md b/packages/components/releaseNotes/components.md index 62c3b374bb..f91fa3da4e 100644 --- a/packages/components/releaseNotes/components.md +++ b/packages/components/releaseNotes/components.md @@ -1,6 +1,11 @@ # @labkey/components Components, models, actions, and utility functions for LabKey applications and pages +### version 7.13.1 +*Released*: 26 January 2026 +- Merge from release26.1-SNAPSHOT to develop + - includes changes from 7.7.5 #1926 + ### version 7.13.0 *Released*: 20 January 2026 - Multi value text choices From 0af8eaf07de6098aa288764a14e90cba8cd4739c Mon Sep 17 00:00:00 2001 From: cnathe Date: Mon, 26 Jan 2026 13:57:56 -0600 Subject: [PATCH 4/4] 7.13.1 --- packages/components/package-lock.json | 4 ++-- packages/components/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index a0066cbefd..88d5fa2172 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "7.13.0", + "version": "7.13.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "7.13.0", + "version": "7.13.1", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/packages/components/package.json b/packages/components/package.json index e58f02190d..ac1be00930 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "7.13.0", + "version": "7.13.1", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [