Skip to content

Commit a653baa

Browse files
Merge pull request #3118 from appwrite/fix-hide-low-tier-build-specs
Hide unavailable low-tier build specs
2 parents b584206 + d006d2a commit a653baa

4 files changed

Lines changed: 80 additions & 2 deletions

File tree

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import { trimLeadingDisabledSpecifications } from '$lib/helpers/specifications';
2+
import type { Models } from '@appwrite.io/console';
3+
import { describe, expect, it } from 'vitest';
4+
5+
const specification = (slug: string, enabled: boolean): Models.Specification => ({
6+
slug,
7+
enabled,
8+
cpus: 1,
9+
memory: 512
10+
});
11+
12+
describe('trimLeadingDisabledSpecifications', () => {
13+
it('hides disabled specifications before the first enabled specification', () => {
14+
const list = {
15+
total: 4,
16+
specifications: [
17+
specification('disabled-small', false),
18+
specification('enabled-small', true),
19+
specification('enabled-large', true),
20+
specification('disabled-large', false)
21+
]
22+
};
23+
24+
expect(trimLeadingDisabledSpecifications(list)).toEqual({
25+
total: 3,
26+
specifications: list.specifications.slice(1)
27+
});
28+
expect(list.specifications).toHaveLength(4);
29+
});
30+
31+
it('keeps the list unchanged when the first specification is enabled', () => {
32+
const list = {
33+
total: 2,
34+
specifications: [specification('enabled', true), specification('disabled', false)]
35+
};
36+
37+
expect(trimLeadingDisabledSpecifications(list)).toEqual(list);
38+
});
39+
40+
it('returns an empty list when no specification is enabled', () => {
41+
const list = {
42+
total: 2,
43+
specifications: [
44+
specification('disabled-small', false),
45+
specification('disabled-large', false)
46+
]
47+
};
48+
49+
expect(trimLeadingDisabledSpecifications(list)).toEqual({
50+
total: 0,
51+
specifications: []
52+
});
53+
});
54+
55+
it('keeps an empty list empty', () => {
56+
expect(trimLeadingDisabledSpecifications({ total: 0, specifications: [] })).toEqual({
57+
total: 0,
58+
specifications: []
59+
});
60+
});
61+
});

src/lib/helpers/specifications.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import type { Models } from '@appwrite.io/console';
2+
3+
export function trimLeadingDisabledSpecifications(
4+
list: Models.SpecificationList
5+
): Models.SpecificationList {
6+
const firstEnabledIndex = list.specifications.findIndex(({ enabled }) => enabled);
7+
const specifications =
8+
firstEnabledIndex === -1 ? [] : list.specifications.slice(firstEnabledIndex);
9+
10+
return {
11+
...list,
12+
total: specifications.length,
13+
specifications
14+
};
15+
}

src/routes/(console)/project-[region]-[project]/functions/+layout.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { sdk } from '$lib/stores/sdk';
44
import { Query } from '@appwrite.io/console';
55
import { Dependencies } from '$lib/constants';
66
import { isCloud } from '$lib/system';
7+
import { trimLeadingDisabledSpecifications } from '$lib/helpers/specifications';
78
import type { LayoutLoad } from './$types';
89

910
export const load: LayoutLoad = async ({ depends, params }) => {
@@ -32,7 +33,7 @@ export const load: LayoutLoad = async ({ depends, params }) => {
3233
breadcrumbs: Breadcrumbs,
3334
runtimesList,
3435
installations,
35-
specificationsList: buildSpecificationsList,
36+
specificationsList: trimLeadingDisabledSpecifications(buildSpecificationsList),
3637
runtimeSpecificationsList
3738
};
3839
};

src/routes/(console)/project-[region]-[project]/sites/site-[site]/settings/+page.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { sdk } from '$lib/stores/sdk';
22
import { Dependencies, PAGE_LIMIT } from '$lib/constants';
33
import { isCloud } from '$lib/system';
44
import { Query } from '@appwrite.io/console';
5+
import { trimLeadingDisabledSpecifications } from '$lib/helpers/specifications';
56

67
const VARIABLES_LIMIT = 100;
78

@@ -82,7 +83,7 @@ export const load = async ({ params, depends, parent }) => {
8283
limit,
8384
variablesOffset,
8485
installations,
85-
buildSpecificationsList,
86+
buildSpecificationsList: trimLeadingDisabledSpecifications(buildSpecificationsList),
8687
runtimeSpecificationsList
8788
};
8889
};

0 commit comments

Comments
 (0)