From 2cd902cd7dfd27ee790ff5793b3201e71d1b6048 Mon Sep 17 00:00:00 2001 From: Erik Hughes Date: Mon, 4 Aug 2025 12:39:27 +0200 Subject: [PATCH 1/6] fix: bump version to skip past previously published version --- packages/flag-evaluation/package.json | 2 +- packages/node-sdk/package.json | 4 ++-- packages/openfeature-node-provider/package.json | 2 +- yarn.lock | 8 ++++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/flag-evaluation/package.json b/packages/flag-evaluation/package.json index cafcaa4f..66711476 100644 --- a/packages/flag-evaluation/package.json +++ b/packages/flag-evaluation/package.json @@ -1,6 +1,6 @@ { "name": "@bucketco/flag-evaluation", - "version": "0.2.0", + "version": "0.2.1", "license": "MIT", "repository": { "type": "git", diff --git a/packages/node-sdk/package.json b/packages/node-sdk/package.json index 2b517667..a309e5e4 100644 --- a/packages/node-sdk/package.json +++ b/packages/node-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@bucketco/node-sdk", - "version": "1.9.0", + "version": "1.9.1", "license": "MIT", "repository": { "type": "git", @@ -44,6 +44,6 @@ "vitest": "~1.6.0" }, "dependencies": { - "@bucketco/flag-evaluation": "0.2.0" + "@bucketco/flag-evaluation": "0.2.1" } } diff --git a/packages/openfeature-node-provider/package.json b/packages/openfeature-node-provider/package.json index 1772b922..e4aa4983 100644 --- a/packages/openfeature-node-provider/package.json +++ b/packages/openfeature-node-provider/package.json @@ -50,7 +50,7 @@ "vitest": "~1.6.0" }, "dependencies": { - "@bucketco/node-sdk": "1.9.0" + "@bucketco/node-sdk": "1.9.1" }, "peerDependencies": { "@openfeature/server-sdk": ">=1.16.1" diff --git a/yarn.lock b/yarn.lock index 36c0af2a..d8f8fdd2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -770,7 +770,7 @@ __metadata: languageName: unknown linkType: soft -"@bucketco/flag-evaluation@npm:0.2.0, @bucketco/flag-evaluation@workspace:packages/flag-evaluation": +"@bucketco/flag-evaluation@npm:0.2.1, @bucketco/flag-evaluation@workspace:packages/flag-evaluation": version: 0.0.0-use.local resolution: "@bucketco/flag-evaluation@workspace:packages/flag-evaluation" dependencies: @@ -786,13 +786,13 @@ __metadata: languageName: unknown linkType: soft -"@bucketco/node-sdk@npm:1.9.0, @bucketco/node-sdk@workspace:packages/node-sdk": +"@bucketco/node-sdk@npm:1.9.1, @bucketco/node-sdk@workspace:packages/node-sdk": version: 0.0.0-use.local resolution: "@bucketco/node-sdk@workspace:packages/node-sdk" dependencies: "@babel/core": "npm:~7.24.7" "@bucketco/eslint-config": "npm:~0.0.2" - "@bucketco/flag-evaluation": "npm:0.2.0" + "@bucketco/flag-evaluation": "npm:0.2.1" "@bucketco/tsconfig": "npm:~0.0.2" "@types/node": "npm:^22.12.0" "@vitest/coverage-v8": "npm:~1.6.0" @@ -836,7 +836,7 @@ __metadata: dependencies: "@babel/core": "npm:~7.24.7" "@bucketco/eslint-config": "npm:~0.0.2" - "@bucketco/node-sdk": "npm:1.9.0" + "@bucketco/node-sdk": "npm:1.9.1" "@bucketco/tsconfig": "npm:~0.0.2" "@openfeature/core": "npm:^1.5.0" "@openfeature/server-sdk": "npm:>=1.16.1" From d3dc6743fcb9b1734a37b30e93e6ecfcf43dc8b4 Mon Sep 17 00:00:00 2001 From: Erik Hughes Date: Mon, 4 Aug 2025 12:40:32 +0200 Subject: [PATCH 2/6] chore: bump version of node-provider --- packages/openfeature-node-provider/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/openfeature-node-provider/package.json b/packages/openfeature-node-provider/package.json index e4aa4983..af38b2b0 100644 --- a/packages/openfeature-node-provider/package.json +++ b/packages/openfeature-node-provider/package.json @@ -1,6 +1,6 @@ { "name": "@bucketco/openfeature-node-provider", - "version": "0.3.2", + "version": "0.4.0", "license": "MIT", "repository": { "type": "git", From 99fd1c9bcc65d4d01bddc18adef0255e53db3f6f Mon Sep 17 00:00:00 2001 From: Erik Hughes Date: Mon, 11 Aug 2025 15:57:52 +0200 Subject: [PATCH 3/6] feat: scroll up on search and empty state handling - Added a new CSS class for empty feature cells to improve styling. - Updated the FeaturesTable component to display a message when no features match the search query, enhancing user experience. - Introduced a ref for the dialog content to enable scrolling to the top when a search is performed. --- packages/browser-sdk/src/toolbar/Features.css | 6 ++++++ packages/browser-sdk/src/toolbar/Features.tsx | 20 +++++++++++++++---- packages/browser-sdk/src/toolbar/Toolbar.tsx | 4 +++- packages/browser-sdk/src/ui/Dialog.tsx | 16 +++++++++++++-- 4 files changed, 39 insertions(+), 7 deletions(-) diff --git a/packages/browser-sdk/src/toolbar/Features.css b/packages/browser-sdk/src/toolbar/Features.css index c544c10d..00798842 100644 --- a/packages/browser-sdk/src/toolbar/Features.css +++ b/packages/browser-sdk/src/toolbar/Features.css @@ -63,6 +63,12 @@ } } +.feature-empty-cell { + width: 100%; + color: var(--gray500); + padding: 6px 0; +} + .feature-name-cell { white-space: nowrap; overflow: hidden; diff --git a/packages/browser-sdk/src/toolbar/Features.tsx b/packages/browser-sdk/src/toolbar/Features.tsx index a5d6eb09..6d015928 100644 --- a/packages/browser-sdk/src/toolbar/Features.tsx +++ b/packages/browser-sdk/src/toolbar/Features.tsx @@ -19,17 +19,29 @@ export function FeaturesTable({ isOpen: boolean; setIsEnabledOverride: (key: string, isEnabled: boolean | null) => void; }) { + const hasFeatures = features.length > 0; + const hasShownFeatures = features.some((feature) => + feature.key + .toLocaleLowerCase() + .includes(searchQuery?.toLocaleLowerCase() ?? ""), + ); + // List features that match the search query first const searchedFeatures = searchQuery === null ? features : [...features].sort((a, _b) => (a.key.includes(searchQuery) ? -1 : 1)); - - if (searchedFeatures.length === 0) { - return
No features found
; - } return ( + {(!hasFeatures || !hasShownFeatures) && ( + + + + )} {searchedFeatures.map((feature, index) => ( (null); + const dialogContentRef = useRef(null); const [features, setFeatures] = useState([]); const updateFeatures = useCallback(() => { @@ -67,6 +68,7 @@ export default function Toolbar({ const [search, setSearch] = useState(null); const onSearch = (val: string) => { setSearch(val === "" ? null : val); + dialogContentRef.current?.scrollTo({ top: 0 }); }; const sortedFeatures = [...features].sort((a, b) => @@ -102,7 +104,7 @@ export default function Toolbar({ - + ; }) { - return
{children}
; + return ( +
+ {children} +
+ ); } export function DialogContent({ children, + innerRef, }: { children: preact.ComponentChildren; + innerRef?: Ref; }) { - return
{children}
; + return ( +
+ {children} +
+ ); } From b60b803d50c25ed4e638bfd58b9d67f40de0360a Mon Sep 17 00:00:00 2001 From: Erik Hughes Date: Mon, 11 Aug 2025 16:01:42 +0200 Subject: [PATCH 4/6] chore: bump version --- packages/browser-sdk/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/browser-sdk/package.json b/packages/browser-sdk/package.json index c6f58e10..74a041f9 100644 --- a/packages/browser-sdk/package.json +++ b/packages/browser-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@bucketco/browser-sdk", - "version": "3.3.1", + "version": "3.3.2", "packageManager": "yarn@4.1.1", "license": "MIT", "repository": { From adfd577f8ddbb9b15f1d364b159a9c75941f6268 Mon Sep 17 00:00:00 2001 From: Erik Hughes Date: Mon, 11 Aug 2025 16:03:03 +0200 Subject: [PATCH 5/6] chore: update lockfile --- yarn.lock | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 63de49f6..8b8b29b8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -683,7 +683,19 @@ __metadata: languageName: node linkType: hard -"@bucketco/browser-sdk@npm:3.3.1, @bucketco/browser-sdk@workspace:packages/browser-sdk": +"@bucketco/browser-sdk@npm:3.3.1": + version: 3.3.1 + resolution: "@bucketco/browser-sdk@npm:3.3.1" + dependencies: + "@floating-ui/dom": "npm:^1.6.8" + canonical-json: "npm:^0.0.4" + js-cookie: "npm:^3.0.5" + preact: "npm:^10.22.1" + checksum: 10c0/30bd1fa0f084c7eee0a22f917bfe488667243013711787bc36c9befa0d3aa27a4aed6f0576416a098b3d3d64ff1cf873587022d4d9c07198e11d4f81f31380de + languageName: node + linkType: hard + +"@bucketco/browser-sdk@workspace:packages/browser-sdk": version: 0.0.0-use.local resolution: "@bucketco/browser-sdk@workspace:packages/browser-sdk" dependencies: From 082beaee177e36dee012911632245ad9c23721e0 Mon Sep 17 00:00:00 2001 From: Erik Hughes Date: Mon, 11 Aug 2025 16:08:02 +0200 Subject: [PATCH 6/6] fix: maintain alphabetical order when searching --- packages/browser-sdk/src/toolbar/Features.tsx | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/browser-sdk/src/toolbar/Features.tsx b/packages/browser-sdk/src/toolbar/Features.tsx index 6d015928..0121c225 100644 --- a/packages/browser-sdk/src/toolbar/Features.tsx +++ b/packages/browser-sdk/src/toolbar/Features.tsx @@ -25,11 +25,24 @@ export function FeaturesTable({ .toLocaleLowerCase() .includes(searchQuery?.toLocaleLowerCase() ?? ""), ); - // List features that match the search query first + + // List features that match the search query first then alphabetically const searchedFeatures = searchQuery === null ? features - : [...features].sort((a, _b) => (a.key.includes(searchQuery) ? -1 : 1)); + : [...features].sort((a, b) => { + const aMatches = a.key.includes(searchQuery); + const bMatches = b.key.includes(searchQuery); + + // If both match or both don't match, sort alphabetically + if (aMatches === bMatches) { + return a.key.localeCompare(b.key); + } + + // Otherwise, matching features come first + return aMatches ? -1 : 1; + }); + return (
+ No features{" "} + {!hasShownFeatures ? `matching "${searchQuery} "` : ""} + found +