@instructure/platform-modules 0.4.0 → 1.0.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.
Files changed (108) hide show
  1. package/README.md +3 -2
  2. package/dist/adapters/canvasGraphql/index.d.ts +4 -14
  3. package/dist/adapters/canvasGraphql/index.d.ts.map +1 -1
  4. package/dist/adapters/canvasGraphql/normalize.d.ts +6 -75
  5. package/dist/adapters/canvasGraphql/normalize.d.ts.map +1 -1
  6. package/dist/adapters/canvasGraphql/queries.d.ts +7 -21
  7. package/dist/adapters/canvasGraphql/queries.d.ts.map +1 -1
  8. package/dist/adapters/inMemory.d.ts +0 -16
  9. package/dist/adapters/inMemory.d.ts.map +1 -1
  10. package/dist/adapters/limits.d.ts +3 -24
  11. package/dist/adapters/limits.d.ts.map +1 -1
  12. package/dist/adapters/types.d.ts +14 -34
  13. package/dist/adapters/types.d.ts.map +1 -1
  14. package/dist/cache/invalidate.d.ts +0 -23
  15. package/dist/cache/invalidate.d.ts.map +1 -1
  16. package/dist/cache/keys.d.ts +3 -14
  17. package/dist/cache/keys.d.ts.map +1 -1
  18. package/dist/components/FilterChips.d.ts +4 -11
  19. package/dist/components/FilterChips.d.ts.map +1 -1
  20. package/dist/components/ModuleCard.d.ts +0 -9
  21. package/dist/components/ModuleCard.d.ts.map +1 -1
  22. package/dist/components/ModuleCard.stories.d.ts +3 -5
  23. package/dist/components/ModuleCard.stories.d.ts.map +1 -1
  24. package/dist/components/ModuleItemRow.d.ts +0 -10
  25. package/dist/components/ModuleItemRow.d.ts.map +1 -1
  26. package/dist/components/ModuleNumberBadge.d.ts +0 -1
  27. package/dist/components/ModuleNumberBadge.d.ts.map +1 -1
  28. package/dist/components/ModulesList.d.ts +0 -31
  29. package/dist/components/ModulesList.d.ts.map +1 -1
  30. package/dist/components/ModulesList.stories.d.ts +11 -69
  31. package/dist/components/ModulesList.stories.d.ts.map +1 -1
  32. package/dist/components/StatusPill.d.ts +4 -3
  33. package/dist/components/StatusPill.d.ts.map +1 -1
  34. package/dist/components/index.d.ts +1 -1
  35. package/dist/components/index.d.ts.map +1 -1
  36. package/dist/components/labels.d.ts +1 -54
  37. package/dist/components/labels.d.ts.map +1 -1
  38. package/dist/components/lightThemeDecorator.d.ts +3 -0
  39. package/dist/components/lightThemeDecorator.d.ts.map +1 -0
  40. package/dist/config/base.d.ts +0 -5
  41. package/dist/config/base.d.ts.map +1 -1
  42. package/dist/config/capabilities.d.ts +8 -0
  43. package/dist/config/capabilities.d.ts.map +1 -0
  44. package/dist/config/context.d.ts +1 -1
  45. package/dist/config/context.d.ts.map +1 -1
  46. package/dist/config/filters.d.ts +15 -0
  47. package/dist/config/filters.d.ts.map +1 -0
  48. package/dist/config/formatters.d.ts +15 -0
  49. package/dist/config/formatters.d.ts.map +1 -0
  50. package/dist/config/index.d.ts +9 -4
  51. package/dist/config/index.d.ts.map +1 -1
  52. package/dist/config/itemMeta.d.ts +5 -0
  53. package/dist/config/itemMeta.d.ts.map +1 -0
  54. package/dist/config/itemTypes.d.ts +4 -0
  55. package/dist/config/itemTypes.d.ts.map +1 -0
  56. package/dist/config/partialModulesConfig.d.ts +0 -1
  57. package/dist/config/partialModulesConfig.d.ts.map +1 -1
  58. package/dist/config/registry.d.ts +2 -22
  59. package/dist/config/registry.d.ts.map +1 -1
  60. package/dist/config/resolve.d.ts +0 -4
  61. package/dist/config/resolve.d.ts.map +1 -1
  62. package/dist/config/schemas.d.ts +37 -7
  63. package/dist/config/schemas.d.ts.map +1 -1
  64. package/dist/config/types.d.ts +8 -11
  65. package/dist/config/types.d.ts.map +1 -1
  66. package/dist/config/useFormatters.d.ts +10 -0
  67. package/dist/config/useFormatters.d.ts.map +1 -0
  68. package/dist/fixtures/generate.d.ts +1 -26
  69. package/dist/fixtures/generate.d.ts.map +1 -1
  70. package/dist/fixtures/index.d.ts +1 -1
  71. package/dist/fixtures/index.d.ts.map +1 -1
  72. package/dist/fixtures/scenarios.d.ts +1 -6
  73. package/dist/fixtures/scenarios.d.ts.map +1 -1
  74. package/dist/hooks/constants.d.ts +6 -23
  75. package/dist/hooks/constants.d.ts.map +1 -1
  76. package/dist/hooks/queryOptions.d.ts +2 -5
  77. package/dist/hooks/queryOptions.d.ts.map +1 -1
  78. package/dist/hooks/useItemsMode.d.ts +3 -35
  79. package/dist/hooks/useItemsMode.d.ts.map +1 -1
  80. package/dist/hooks/useModuleItemQueries.d.ts +1 -7
  81. package/dist/hooks/useModuleItemQueries.d.ts.map +1 -1
  82. package/dist/hooks/useModuleItems.d.ts +0 -16
  83. package/dist/hooks/useModuleItems.d.ts.map +1 -1
  84. package/dist/hooks/useModules.d.ts +3 -24
  85. package/dist/hooks/useModules.d.ts.map +1 -1
  86. package/dist/hooks/useModulesPageData.d.ts +9 -7
  87. package/dist/hooks/useModulesPageData.d.ts.map +1 -1
  88. package/dist/i18n.d.ts +6 -36
  89. package/dist/i18n.d.ts.map +1 -1
  90. package/dist/index.d.ts +5 -5
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +1788 -1405
  93. package/dist/types/domain.d.ts +4 -27
  94. package/dist/types/domain.d.ts.map +1 -1
  95. package/dist/types/enums.d.ts +3 -25
  96. package/dist/types/enums.d.ts.map +1 -1
  97. package/dist/types/extensions.d.ts +0 -22
  98. package/dist/types/extensions.d.ts.map +1 -1
  99. package/dist/types/filterClause.d.ts +18 -0
  100. package/dist/types/filterClause.d.ts.map +1 -0
  101. package/dist/types/index.d.ts +1 -0
  102. package/dist/types/index.d.ts.map +1 -1
  103. package/dist/types/navigation.d.ts +0 -6
  104. package/dist/types/navigation.d.ts.map +1 -1
  105. package/dist/types/schemas.d.ts +0 -5
  106. package/dist/types/schemas.d.ts.map +1 -1
  107. package/locales/en.json +14 -3
  108. package/package.json +14 -13
@@ -1,12 +1,9 @@
1
+ import { ReactNode } from 'react';
1
2
  import { z } from 'zod';
3
+ import { TranslateFunction } from '../i18n';
4
+ import { FilterClause, Module, ModuleItem } from '../types';
5
+ import { BoundFormatters } from './useFormatters';
2
6
  import { ModulesConfig } from './types';
3
- /**
4
- * The shape every registry entry shares, schema first so the type is inferred
5
- * from one list of fields — same inversion as `types/enums.ts`.
6
- *
7
- * Registries are validated at runtime rather than typed with generics, because
8
- * a host may fetch one. See `docs/adr/0001-customization.md`.
9
- */
10
7
  export declare const RegistryEntrySchema: z.ZodObject<{
11
8
  label: z.ZodString;
12
9
  order: z.ZodNumber;
@@ -14,5 +11,38 @@ export declare const RegistryEntrySchema: z.ZodObject<{
14
11
  }>;
15
12
  export type RegistryEntry = z.infer<typeof RegistryEntrySchema>;
16
13
  export declare function registrySchema<E extends RegistryEntry>(entrySchema: z.ZodType<E>): z.ZodRecord<z.ZodString, z.ZodType<E>>;
14
+ export interface ItemTypeContext {
15
+ item: ModuleItem;
16
+ }
17
+ export interface ItemTypeEntry extends RegistryEntry {
18
+ icon?: ReactNode;
19
+ renderIcon?: (context: ItemTypeContext) => ReactNode;
20
+ }
21
+ export declare const ItemTypeEntrySchema: z.ZodType<ItemTypeEntry>;
22
+ export interface MetaFieldContext {
23
+ item: ModuleItem;
24
+ t: TranslateFunction;
25
+ today: Date;
26
+ locale: string;
27
+ timezone?: string;
28
+ formatters: BoundFormatters;
29
+ config: ModulesConfig;
30
+ }
31
+ export interface MetaFieldEntry extends RegistryEntry {
32
+ render: (context: MetaFieldContext) => ReactNode;
33
+ }
34
+ export declare const MetaFieldEntrySchema: z.ZodType<MetaFieldEntry>;
35
+ export interface FilterContext {
36
+ today: Date;
37
+ timezone?: string;
38
+ }
39
+ export interface FilterEntry extends RegistryEntry {
40
+ /** Runs over loaded pages only. */
41
+ predicate: (module: Module, context: FilterContext) => boolean;
42
+ query?: FilterClause;
43
+ /** Ignore any inherited `query` and serve this filter by its predicate. */
44
+ clientOnly?: boolean;
45
+ }
46
+ export declare const FilterEntrySchema: z.ZodType<FilterEntry>;
17
47
  export declare const ModulesConfigSchema: z.ZodType<ModulesConfig>;
18
48
  //# sourceMappingURL=schemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/config/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,SAAS,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,SAAS,CAAA;IAClB,KAAK,EAAE,CAAC,CAAC,SAAS,CAAA;IAClB,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;CACpC,CASC,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,wBAAgB,cAAc,CAAC,CAAC,SAAS,aAAa,EACpD,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GACxB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAExC;AAID,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CASvD,CAAA"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/config/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,KAAK,YAAY,EAAsB,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAA;AAE9F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,SAAS,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,SAAS,CAAA;IAClB,KAAK,EAAE,CAAC,CAAC,SAAS,CAAA;IAClB,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;CACpC,CAMC,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,wBAAgB,cAAc,CAAC,CAAC,SAAS,aAAa,EACpD,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GACxB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAExC;AAID,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAA;CACjB;AAED,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,IAAI,CAAC,EAAE,SAAS,CAAA;IAEhB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,SAAS,CAAA;CACrD;AAgBD,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAK9C,CAAA;AAQX,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAA;IAChB,CAAC,EAAE,iBAAiB,CAAA;IACpB,KAAK,EAAE,IAAI,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,eAAe,CAAA;IAC3B,MAAM,EAAE,aAAa,CAAA;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,MAAM,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,SAAS,CAAA;CACjD;AAED,eAAO,MAAM,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAIhD,CAAA;AAEX,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,IAAI,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,mCAAmC;IACnC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAA;IAC9D,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAM1C,CAAA;AAEX,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAgBvD,CAAA"}
@@ -1,27 +1,24 @@
1
+ import { ModulesFormatters } from './formatters';
1
2
  import { Registry, RegistryOverride } from './registry';
2
- export interface ModulesFormatters {
3
- }
3
+ import { FilterEntry, ItemTypeEntry, MetaFieldEntry } from './schemas';
4
4
  export interface ModulesNavigation {
5
5
  }
6
- /**
7
- * Everything a host can customize. Not customizable means nothing to set.
8
- */
9
6
  export interface ModulesConfig {
10
7
  formatters: ModulesFormatters;
11
- itemTypes: Registry;
8
+ itemTypes: Registry<ItemTypeEntry>;
12
9
  itemStatuses: Registry;
13
- itemMeta: Registry;
14
- filters: Registry;
10
+ itemMeta: Registry<MetaFieldEntry>;
11
+ filters: Registry<FilterEntry>;
15
12
  moduleActions: Registry;
16
13
  itemActions: Registry;
17
14
  navigation: ModulesNavigation;
18
15
  }
19
16
  export interface ModulesConfigOverride {
20
17
  formatters?: Partial<ModulesFormatters>;
21
- itemTypes?: RegistryOverride;
18
+ itemTypes?: RegistryOverride<ItemTypeEntry>;
22
19
  itemStatuses?: RegistryOverride;
23
- itemMeta?: RegistryOverride;
24
- filters?: RegistryOverride;
20
+ itemMeta?: RegistryOverride<MetaFieldEntry>;
21
+ filters?: RegistryOverride<FilterEntry>;
25
22
  moduleActions?: RegistryOverride;
26
23
  itemActions?: RegistryOverride;
27
24
  navigation?: Partial<ModulesNavigation>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE5D,MAAM,WAAW,iBAAiB;CAAG;AAErC,MAAM,WAAW,iBAAiB;CAAG;AAErC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,iBAAiB,CAAA;IAC7B,SAAS,EAAE,QAAQ,CAAA;IACnB,YAAY,EAAE,QAAQ,CAAA;IACtB,QAAQ,EAAE,QAAQ,CAAA;IAClB,OAAO,EAAE,QAAQ,CAAA;IACjB,aAAa,EAAE,QAAQ,CAAA;IACvB,WAAW,EAAE,QAAQ,CAAA;IACrB,UAAU,EAAE,iBAAiB,CAAA;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACvC,SAAS,CAAC,EAAE,gBAAgB,CAAA;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAC1B,aAAa,CAAC,EAAE,gBAAgB,CAAA;IAChC,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;CACxC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE3E,MAAM,WAAW,iBAAiB;CAAG;AAErC,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,iBAAiB,CAAA;IAC7B,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAA;IAClC,YAAY,EAAE,QAAQ,CAAA;IACtB,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAA;IAClC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;IAC9B,aAAa,EAAE,QAAQ,CAAA;IACvB,WAAW,EAAE,QAAQ,CAAA;IACrB,UAAU,EAAE,iBAAiB,CAAA;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACvC,SAAS,CAAC,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAA;IAC3C,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B,QAAQ,CAAC,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAA;IAC3C,OAAO,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAA;IACvC,aAAa,CAAC,EAAE,gBAAgB,CAAA;IAChC,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;CACxC"}
@@ -0,0 +1,10 @@
1
+ import { Module } from '../types';
2
+ export interface BoundFormatters {
3
+ moduleLabel: (position: number, module: Module) => string | null;
4
+ dueByline: (iso: string, today: Date) => string;
5
+ unlockByline: (iso: string, today: Date) => string;
6
+ points: (pointsPossible: number | null | undefined) => string | null;
7
+ progress: (percentComplete: number, met: number, total: number) => string;
8
+ }
9
+ export declare function useFormatters(): BoundFormatters;
10
+ //# sourceMappingURL=useFormatters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFormatters.d.ts","sourceRoot":"","sources":["../../src/config/useFormatters.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAGtC,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IAChE,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,MAAM,CAAA;IAC/C,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,MAAM,CAAA;IAClD,MAAM,EAAE,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,KAAK,MAAM,GAAG,IAAI,CAAA;IACpE,QAAQ,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;CAC1E;AAED,wBAAgB,aAAa,IAAI,eAAe,CAiB/C"}
@@ -1,37 +1,12 @@
1
1
  import { InMemoryFixture } from '../adapters/inMemory';
2
2
  import { ModuleStatus } from '../types/domain';
3
- /** Also the reason `SMALL_MODULE_COUNT` is what it is: a shorter fixture hides a state. */
4
3
  export declare const MODULE_STATUS_CYCLE: readonly ModuleStatus[];
5
4
  export declare const FIXTURE_COURSE_ID = "1";
6
- /**
7
- * Which audience the fixture describes.
8
- *
9
- * Not cosmetic: the two shapes are mutually exclusive in Canvas, and a fixture
10
- * that mixes them describes a page no host can ever render.
11
- *
12
- * - `student` — everything is published, and every module carries a `progress`
13
- * with every item a `status`. A student's module list contains no unpublished
14
- * content at all.
15
- * - `teacher` — publish state varies, and nothing carries progress. Canvas
16
- * resolves `progression` to null for a viewer with no progression record, so a
17
- * teacher fixture with a `progress` would be describing a student.
18
- */
5
+ /** `student` publishes everything and carries progress. `teacher` does neither. */
19
6
  export type FixtureView = 'student' | 'teacher';
20
7
  export interface BuildFixtureOptions {
21
- /** Defaults to `student`. */
22
8
  view?: FixtureView;
23
- /**
24
- * Which course the fixture is for. Defaults to `FIXTURE_COURSE_ID` ('1').
25
- *
26
- * Override it to prove a hook actually threads `courseId` through: with every
27
- * fixture on course '1', a hook that hardcoded '1' internally would be
28
- * indistinguishable from one that passed the caller's value.
29
- */
30
9
  courseId?: string;
31
10
  }
32
- /**
33
- * Build a fixture from a per-module item count, e.g. `[8, 250, 8]` is three
34
- * modules where the middle one is far past the inline limit.
35
- */
36
11
  export declare function buildFixture(itemCounts: readonly number[], options?: BuildFixtureOptions): InMemoryFixture;
37
12
  //# sourceMappingURL=generate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/fixtures/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAQV,YAAY,EACb,MAAM,iBAAiB,CAAA;AAiBxB,2FAA2F;AAC3F,eAAO,MAAM,mBAAmB,EAAE,SAAS,YAAY,EAOtD,CAAA;AA2BD,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAsPpC;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAA;AAE/C,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAgBD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,OAAO,GAAE,mBAAwB,GAChC,eAAe,CAiBjB"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/fixtures/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAQV,YAAY,EACb,MAAM,iBAAiB,CAAA;AAcxB,eAAO,MAAM,mBAAmB,EAAE,SAAS,YAAY,EAQtD,CAAA;AAoBD,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAsOpC,mFAAmF;AACnF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAA;AAE/C,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAeD,wBAAgB,YAAY,CAC1B,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,OAAO,GAAE,mBAAwB,GAChC,eAAe,CAiBjB"}
@@ -1,3 +1,3 @@
1
1
  export { buildFixture, type BuildFixtureOptions, FIXTURE_COURSE_ID, type FixtureView, MODULE_STATUS_CYCLE, } from './generate';
2
- export { courseEmpty, courseFatModule, courseItemLinks, courseLarge, courseLockReasons, courseSmall, FAT_MODULE_ITEM_COUNT, FAT_MODULE_SIBLING_ITEM_COUNT, FUTURE_UNLOCK_AT, LARGE_ITEMS_PER_MODULE, LARGE_MODULE_COUNT, PAST_UNLOCK_AT, SMALL_ITEMS_PER_MODULE, SMALL_MODULE_COUNT, } from './scenarios';
2
+ export { courseEmpty, courseFatModule, courseItemLinks, courseItemRowVariants, courseLarge, courseLockReasons, courseSmall, FAT_MODULE_ITEM_COUNT, FAT_MODULE_SIBLING_ITEM_COUNT, FUTURE_UNLOCK_AT, LARGE_ITEMS_PER_MODULE, LARGE_MODULE_COUNT, PAST_UNLOCK_AT, SMALL_ITEMS_PER_MODULE, SMALL_MODULE_COUNT, } from './scenarios';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fixtures/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,iBAAiB,EACjB,KAAK,WAAW,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,WAAW,EACX,eAAe,EACf,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACrB,6BAA6B,EAC7B,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fixtures/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,iBAAiB,EACjB,KAAK,WAAW,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,WAAW,EACX,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACrB,6BAA6B,EAC7B,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,aAAa,CAAA"}
@@ -1,22 +1,17 @@
1
1
  import { InMemoryFixture } from '../adapters/inMemory';
2
2
  export declare const FUTURE_UNLOCK_AT = "2099-08-31T06:59:00Z";
3
3
  export declare const PAST_UNLOCK_AT = "2020-01-06T07:00:00Z";
4
- /** `MODULE_STATUS_CYCLE.length` modules, not a round number: fewer hides a `ModuleStatus`. */
5
4
  export declare const SMALL_MODULE_COUNT: number;
6
5
  export declare const SMALL_ITEMS_PER_MODULE = 8;
7
- /** 120 modules × 25 items. Past the 100-per-page module limit Career truncates at. */
8
6
  export declare const LARGE_MODULE_COUNT = 120;
9
7
  export declare const LARGE_ITEMS_PER_MODULE = 25;
10
- /** 3 modules, the middle one 250 items — 2.5× `INLINE_ITEM_LIMIT`. */
11
8
  export declare const FAT_MODULE_ITEM_COUNT = 250;
12
9
  export declare const FAT_MODULE_SIBLING_ITEM_COUNT = 8;
13
10
  export declare function courseSmall(): InMemoryFixture;
14
- /** A client that ignores the next cursor shows 100 of 120 and says nothing, as Career does. */
15
11
  export declare function courseLarge(): InMemoryFixture;
16
- /** The "renders exactly 100 items and stops" bug cannot recur while this is in the suite. */
17
12
  export declare function courseFatModule(): InMemoryFixture;
18
- /** Prerequisites point at modules outside this fixture, as they do on a paged course. */
19
13
  export declare function courseLockReasons(): InMemoryFixture;
20
14
  export declare function courseEmpty(): InMemoryFixture;
15
+ export declare function courseItemRowVariants(): InMemoryFixture;
21
16
  export declare function courseItemLinks(): InMemoryFixture;
22
17
  //# sourceMappingURL=scenarios.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scenarios.d.ts","sourceRoot":"","sources":["../../src/fixtures/scenarios.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAM3D,eAAO,MAAM,gBAAgB,yBAAyB,CAAA;AACtD,eAAO,MAAM,cAAc,yBAAyB,CAAA;AAKpD,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB,EAAE,MAAmC,CAAA;AACpE,eAAO,MAAM,sBAAsB,IAAI,CAAA;AAEvC,sFAAsF;AACtF,eAAO,MAAM,kBAAkB,MAAM,CAAA;AACrC,eAAO,MAAM,sBAAsB,KAAK,CAAA;AAExC,sEAAsE;AACtE,eAAO,MAAM,qBAAqB,MAAM,CAAA;AACxC,eAAO,MAAM,6BAA6B,IAAI,CAAA;AAE9C,wBAAgB,WAAW,IAAI,eAAe,CAE7C;AAED,+FAA+F;AAC/F,wBAAgB,WAAW,IAAI,eAAe,CAE7C;AAED,6FAA6F;AAC7F,wBAAgB,eAAe,IAAI,eAAe,CAMjD;AAED,yFAAyF;AACzF,wBAAgB,iBAAiB,IAAI,eAAe,CAwCnD;AAED,wBAAgB,WAAW,IAAI,eAAe,CAE7C;AAED,wBAAgB,eAAe,IAAI,eAAe,CA8CjD"}
1
+ {"version":3,"file":"scenarios.d.ts","sourceRoot":"","sources":["../../src/fixtures/scenarios.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAM3D,eAAO,MAAM,gBAAgB,yBAAyB,CAAA;AACtD,eAAO,MAAM,cAAc,yBAAyB,CAAA;AAEpD,eAAO,MAAM,kBAAkB,EAAE,MAAmC,CAAA;AACpE,eAAO,MAAM,sBAAsB,IAAI,CAAA;AAEvC,eAAO,MAAM,kBAAkB,MAAM,CAAA;AACrC,eAAO,MAAM,sBAAsB,KAAK,CAAA;AAExC,eAAO,MAAM,qBAAqB,MAAM,CAAA;AACxC,eAAO,MAAM,6BAA6B,IAAI,CAAA;AAE9C,wBAAgB,WAAW,IAAI,eAAe,CAE7C;AAED,wBAAgB,WAAW,IAAI,eAAe,CAE7C;AAED,wBAAgB,eAAe,IAAI,eAAe,CAMjD;AAED,wBAAgB,iBAAiB,IAAI,eAAe,CAyCnD;AAED,wBAAgB,WAAW,IAAI,eAAe,CAE7C;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CAmEvD;AAED,wBAAgB,eAAe,IAAI,eAAe,CA8CjD"}
@@ -1,32 +1,15 @@
1
1
  import { PageInfo } from '../types/domain';
2
- /** Canvas's `Api::MAX_PER_PAGE`. One page of modules per request by default. */
2
+ /** Canvas's `Api::MAX_PER_PAGE`. */
3
3
  export declare const DEFAULT_PAGE_SIZE: number;
4
- /** Items are paged separately; same ceiling. */
4
+ /** Items page separately, against the same ceiling. */
5
5
  export declare const DEFAULT_ITEM_PAGE_SIZE: number;
6
- /** Per-module ceiling above which inlining stops being worthwhile. @see INLINE_ITEM_LIMIT */
6
+ /** Per-module ceiling above which inlining stops paying. @see INLINE_ITEM_LIMIT */
7
7
  export declare const DEFAULT_INLINE_THRESHOLD: number;
8
- /**
9
- * How many per-module item requests may be in flight at once.
10
- *
11
- * Expanding "all modules" on a 40-module course should not open 40 sockets;
12
- * browsers queue them anyway, but the server sees the whole burst.
13
- */
8
+ /** Caps the burst the server sees when a user expands every module at once. */
14
9
  export declare const DEFAULT_ITEM_CONCURRENCY: number;
15
- /**
16
- * Why this is not zero.
17
- *
18
- * With `staleTime: 0` every re-enable of a query — which is what re-expanding a
19
- * module is — counts as stale and refetches. That is the behavior this package
20
- * exists to remove. Five minutes is long enough that expand/collapse within a
21
- * sitting is free, short enough that coming back to the tab later is honest.
22
- */
10
+ /** Not zero: re-expanding a module re-enables its query, and a stale query refetches. */
23
11
  export declare const DEFAULT_STALE_TIME_MS: number;
24
- /**
25
- * Collapsed modules keep their item query subscribed, which pins the cache entry. Capped so
26
- * "Expand all" on a 120-module course cannot pin 120 of them; past the cap the
27
- * least-recently-active is evicted and re-expanding it may refetch.
28
- */
12
+ /** A collapsed query stays subscribed and pins its cache entry. Past this the oldest is evicted. */
29
13
  export declare const DEFAULT_RETAIN_COLLAPSED_LIMIT: number;
30
- /** The pageInfo of a query that has not resolved yet. Never truncates silently. */
31
14
  export declare const EMPTY_PAGE_INFO: PageInfo;
32
15
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/hooks/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE/C,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,EAAE,MAAY,CAAA;AAE5C,gDAAgD;AAChD,eAAO,MAAM,sBAAsB,EAAE,MAAY,CAAA;AAEjD,6FAA6F;AAC7F,eAAO,MAAM,wBAAwB,EAAE,MAAY,CAAA;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAU,CAAA;AAEjD;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAsB,CAAA;AAE1D;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAAW,CAAA;AAExD,mFAAmF;AACnF,eAAO,MAAM,eAAe,EAAE,QAAkD,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/hooks/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE/C,oCAAoC;AACpC,eAAO,MAAM,iBAAiB,EAAE,MAAY,CAAA;AAE5C,uDAAuD;AACvD,eAAO,MAAM,sBAAsB,EAAE,MAAY,CAAA;AAEjD,mFAAmF;AACnF,eAAO,MAAM,wBAAwB,EAAE,MAAY,CAAA;AAEnD,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,EAAE,MAAU,CAAA;AAEjD,yFAAyF;AACzF,eAAO,MAAM,qBAAqB,EAAE,MAAsB,CAAA;AAE1D,oGAAoG;AACpG,eAAO,MAAM,8BAA8B,EAAE,MAAW,CAAA;AAExD,eAAO,MAAM,eAAe,EAAE,QAAkD,CAAA"}
@@ -3,7 +3,7 @@ import { LimitFunction } from 'p-limit';
3
3
  import { ModulesDataAdapter } from '../adapters/types';
4
4
  import { ModuleItemsKey, ModulesListKey, ModulesView } from '../cache/keys';
5
5
  import { ModuleItemsPage, ModulesPage } from '../types/domain';
6
- /** `null` is the first page; otherwise only ever something a server said. */
6
+ import { FilterClause } from '../types/filterClause';
7
7
  export type ModulesCursor = string | null;
8
8
  export type ModulesQueryOptions = InfiniteQueryObserverOptions<ModulesPage, Error, InfiniteData<ModulesPage, ModulesCursor>, ModulesListKey, ModulesCursor>;
9
9
  export type ModuleItemsQueryOptions = InfiniteQueryObserverOptions<ModuleItemsPage, Error, InfiniteData<ModuleItemsPage, ModulesCursor>, ModuleItemsKey, ModulesCursor>;
@@ -12,9 +12,8 @@ export interface ModulesQueryArgs {
12
12
  adapter: ModulesDataAdapter;
13
13
  pageSize: number;
14
14
  includeItems: boolean;
15
- /** Items to request per module when inlining. @see ListModulesArgs.inlineItemsFirst */
15
+ filter?: FilterClause;
16
16
  inlineItemsFirst?: number;
17
- /** Modules to request when inlining. @see ListModulesArgs.inlineFirst */
18
17
  inlineFirst?: number;
19
18
  view?: ModulesView;
20
19
  staleTime: number;
@@ -25,11 +24,9 @@ export interface ModuleItemsQueryArgs {
25
24
  moduleId: string;
26
25
  adapter: ModulesDataAdapter;
27
26
  pageSize: number;
28
- /** Not sent to the adapter; it partitions the key. @see ModuleItemsKeyOptions */
29
27
  view?: ModulesView;
30
28
  staleTime: number;
31
29
  enabled: boolean;
32
- /** One limiter instance for every module, so "expand all" is a trickle. */
33
30
  limit?: LimitFunction;
34
31
  }
35
32
  export declare function modulesQueryOptions(args: ModulesQueryArgs): ModulesQueryOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"queryOptions.d.ts","sourceRoot":"","sources":["../../src/hooks/queryOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAKnE,6EAA6E;AAC7E,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,IAAI,CAAA;AAEzC,MAAM,MAAM,mBAAmB,GAAG,4BAA4B,CAC5D,WAAW,EACX,KAAK,EACL,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,EACxC,cAAc,EACd,aAAa,CACd,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,4BAA4B,CAChE,eAAe,EACf,KAAK,EACL,YAAY,CAAC,eAAe,EAAE,aAAa,CAAC,EAC5C,cAAc,EACd,aAAa,CACd,CAAA;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,OAAO,CAAA;IACrB,uFAAuF;IACvF,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,iFAAiF;IACjF,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB;AAQD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,mBAAmB,CAiC/E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,uBAAuB,CAuB3F"}
1
+ {"version":3,"file":"queryOptions.d.ts","sourceRoot":"","sources":["../../src/hooks/queryOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,IAAI,CAAA;AAEzC,MAAM,MAAM,mBAAmB,GAAG,4BAA4B,CAC5D,WAAW,EACX,KAAK,EACL,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,EACxC,cAAc,EACd,aAAa,CACd,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,4BAA4B,CAChE,eAAe,EACf,KAAK,EACL,YAAY,CAAC,eAAe,EAAE,aAAa,CAAC,EAC5C,cAAc,EACd,aAAa,CACd,CAAA;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB;AAMD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,mBAAmB,CAiC/E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,uBAAuB,CAsB3F"}
@@ -1,65 +1,33 @@
1
1
  import { ModulesDataAdapter } from '../adapters/types';
2
2
  import { ModulesView } from '../cache/keys';
3
3
  import { ModulesPage } from '../types/domain';
4
+ import { FilterClause } from '../types/filterClause';
4
5
  export type ItemsMode = 'auto' | 'inline' | 'onDemand';
5
- /** What `auto` collapses to. */
6
6
  export type ResolvedItemsMode = 'inline' | 'onDemand';
7
7
  export interface UseItemsModeOptions {
8
8
  courseId: string;
9
9
  adapter: ModulesDataAdapter;
10
10
  mode?: ItemsMode;
11
- /** Per-module ceiling for inlining. Defaults to 100. @see INLINE_ITEM_LIMIT */
12
11
  inlineThreshold?: number;
13
- /**
14
- * Ceiling on the implied request's node product.
15
- *
16
- * Defaults to what the adapter declares (`inlineNodeBudget`), then to
17
- * `INLINE_QUERY_NODE_BUDGET`. Pass it only to override both.
18
- */
19
12
  nodeBudget?: number;
20
13
  pageSize?: number;
14
+ /** Must match what the list query gets. The probe shares its key. */
15
+ filter?: FilterClause;
21
16
  view?: ModulesView;
22
17
  staleTime?: number;
23
18
  }
24
19
  export interface UseItemsModeResult {
25
- /** `null` while the `auto` probe is still in flight. */
26
20
  resolvedMode: ResolvedItemsMode | null;
27
21
  isResolving: boolean;
28
- /** True when a probe request was actually needed — i.e. `mode` was `auto`. */
29
22
  probed: boolean;
30
23
  error: Error | null;
31
- /**
32
- * How many items to actually ask for per module when inlining, and how many
33
- * modules to ask for — both measured from the probe rather than assumed.
34
- *
35
- * `null` when unknown (probe unresolved, or an explicit mode skipped it), in
36
- * which case the adapter falls back to its own defaults.
37
- *
38
- * It exists because a transport can charge for the shape of the request rather
39
- * than the size of the result, so asking for what the probe actually saw is
40
- * what keeps an inline page deliverable. @see INLINE_QUERY_NODE_BUDGET
41
- */
42
24
  inlineShape: InlineQueryShape | null;
43
25
  }
44
- /** What an inline `listModules` should request, measured from the probe. */
45
26
  export interface InlineQueryShape {
46
- /** Modules on page 1. */
47
27
  moduleCount: number;
48
- /** The largest `itemCount` among them. */
49
28
  maxItemCount: number;
50
29
  }
51
30
  export declare function resolveItemsMode(firstPage: ModulesPage, inlineThreshold: number, nodeBudget?: number): ResolvedItemsMode;
52
- /**
53
- * For `auto` the probe *is* the list query with `includeItems: false`, so an `onDemand`
54
- * answer costs nothing — same cache key. Known cost of an `inline` answer: the probe stays
55
- * mounted on its own key, so `invalidateModuleList` refetches both.
56
- */
57
31
  export declare function useItemsMode(options: UseItemsModeOptions): UseItemsModeResult;
58
- /**
59
- * The smallest request that still returns the whole page inline.
60
- *
61
- * `maxItemCount` is at least 1 because `first: 0` is not a meaningful request,
62
- * and a course of entirely empty modules should still round-trip.
63
- */
64
32
  export declare function inlineShapeOf(firstPage: ModulesPage): InlineQueryShape;
65
33
  //# sourceMappingURL=useItemsMode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useItemsMode.d.ts","sourceRoot":"","sources":["../../src/hooks/useItemsMode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAIlD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAA;AAEtD,gCAAgC;AAChC,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAAA;AAErD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,+EAA+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,YAAY,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACtC,WAAW,EAAE,OAAO,CAAA;IACpB,8EAA8E;IAC9E,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB;;;;;;;;;;OAUG;IACH,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAA;CACrC;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,WAAW,EACtB,eAAe,EAAE,MAAM,EACvB,UAAU,GAAE,MAAiC,GAC5C,iBAAiB,CAoBnB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CA6D7E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,gBAAgB,CAMtE"}
1
+ {"version":3,"file":"useItemsMode.d.ts","sourceRoot":"","sources":["../../src/hooks/useItemsMode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAIzD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAA;AAEtD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAAA;AAErD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,qEAAqE;IACrE,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACtC,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAA;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,WAAW,EACtB,eAAe,EAAE,MAAM,EACvB,UAAU,GAAE,MAAiC,GAC5C,iBAAiB,CAgBnB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CA4D7E;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,gBAAgB,CAMtE"}
@@ -7,12 +7,6 @@ export interface ModuleItemQueries {
7
7
  results: ReadonlyMap<string, ModuleItemsObserverResult>;
8
8
  fetchNextPage: (moduleId: string) => void;
9
9
  }
10
- export declare function useModuleItemQueries(
11
- /** Modules whose items should be fetching right now. */
12
- activeModuleIds: readonly string[],
13
- /** Must be referentially stable — memoize it in the caller. */
14
- buildOptions: (moduleId: string, enabled: boolean) => ModuleItemsQueryOptions,
15
- /** @see DEFAULT_RETAIN_COLLAPSED_LIMIT */
16
- retainCollapsedLimit?: number): ModuleItemQueries;
10
+ export declare function useModuleItemQueries(activeModuleIds: readonly string[], buildOptions: (moduleId: string, enabled: boolean) => ModuleItemsQueryOptions, retainCollapsedLimit?: number): ModuleItemQueries;
17
11
  export {};
18
12
  //# sourceMappingURL=useModuleItemQueries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useModuleItemQueries.d.ts","sourceRoot":"","sources":["../../src/hooks/useModuleItemQueries.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,2BAA2B,EACjC,MAAM,uBAAuB,CAAA;AAG9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAM5E,KAAK,SAAS,GAAG,YAAY,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;AAE7D,MAAM,MAAM,yBAAyB,GAAG,2BAA2B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;AAUrF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAA;IACvD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C;AAOD,wBAAgB,oBAAoB;AAClC,wDAAwD;AACxD,eAAe,EAAE,SAAS,MAAM,EAAE;AAClC,+DAA+D;AAC/D,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,uBAAuB;AAC7E,0CAA0C;AAC1C,oBAAoB,GAAE,MAAuC,GAC5D,iBAAiB,CAyFnB"}
1
+ {"version":3,"file":"useModuleItemQueries.d.ts","sourceRoot":"","sources":["../../src/hooks/useModuleItemQueries.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,2BAA2B,EACjC,MAAM,uBAAuB,CAAA;AAG9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE5E,KAAK,SAAS,GAAG,YAAY,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;AAE7D,MAAM,MAAM,yBAAyB,GAAG,2BAA2B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;AAUrF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAA;IACvD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C;AAMD,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,SAAS,MAAM,EAAE,EAClC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,uBAAuB,EAC7E,oBAAoB,GAAE,MAAuC,GAC5D,iBAAiB,CA4EnB"}
@@ -7,13 +7,7 @@ export interface UseModuleItemsOptions {
7
7
  moduleId: string;
8
8
  adapter: ModulesDataAdapter;
9
9
  pageSize?: number;
10
- /** The audience being rendered. Partitions the cache; see `ModuleItemsKeyOptions`. */
11
10
  view?: ModulesView;
12
- /**
13
- * Set to the module's expanded state. A collapsed module fetches nothing, and
14
- * — because the query stays mounted while disabled — re-expanding it is a
15
- * cache hit rather than a refetch.
16
- */
17
11
  enabled?: boolean;
18
12
  staleTime?: number;
19
13
  limit?: LimitFunction;
@@ -27,15 +21,5 @@ export interface UseModuleItemsResult {
27
21
  isFetchingNextPage: boolean;
28
22
  error: Error | null;
29
23
  }
30
- /**
31
- * One module's items, paged explicitly, keyed per module.
32
- *
33
- * The query's `AbortSignal` is handed to the adapter (in `queryOptions.ts`), so
34
- * canceling the query — which is what collapsing a module does — aborts the
35
- * request rather than letting a response nobody wants land in the cache.
36
- *
37
- * `useModulesPageData` is the hook a page should use; this one is for a caller
38
- * that already knows it wants exactly one module.
39
- */
40
24
  export declare function useModuleItems(options: UseModuleItemsOptions): UseModuleItemsResult;
41
25
  //# sourceMappingURL=useModuleItems.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useModuleItems.d.ts","sourceRoot":"","sources":["../../src/hooks/useModuleItems.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAI3D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sFAAsF;IACtF,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;IAClB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,CA2CnF"}
1
+ {"version":3,"file":"useModuleItems.d.ts","sourceRoot":"","sources":["../../src/hooks/useModuleItems.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAI3D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;IAClB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACpB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,CA2CnF"}
@@ -1,50 +1,29 @@
1
1
  import { ModulesDataAdapter } from '../adapters/types';
2
2
  import { ModulesView } from '../cache/keys';
3
3
  import { Module, PageInfo } from '../types/domain';
4
+ import { FilterClause } from '../types/filterClause';
4
5
  export interface UseModulesOptions {
5
6
  courseId: string;
6
7
  adapter: ModulesDataAdapter;
7
- /** Modules per request. Defaults to Canvas's max page size. */
8
8
  pageSize?: number;
9
- /** Ask the server to inline each module's items. Resolved by `useItemsMode`. */
10
9
  includeItems?: boolean;
11
- /** Items to request per module when inlining. @see ListModulesArgs.inlineItemsFirst */
10
+ filter?: FilterClause;
12
11
  inlineItemsFirst?: number;
13
- /** Modules to request when inlining. @see ListModulesArgs.inlineFirst */
14
12
  inlineFirst?: number;
15
13
  view?: ModulesView;
16
14
  staleTime?: number;
17
15
  enabled?: boolean;
18
16
  }
19
17
  export interface UseModulesResult {
20
- /** Every module fetched so far, in server order, flattened across pages. */
21
18
  modules: Module[];
22
- /**
23
- * The *last fetched page's* pageInfo — i.e. the frontier. `hasNextPage` here
24
- * is the honest answer to "is there more of this course I have not shown".
25
- */
26
19
  pageInfo: PageInfo;
27
20
  hasNextPage: boolean;
28
- /**
29
- * Fetches exactly one more page. Nothing in this package calls it on your
30
- * behalf: pagination is a decision the UI makes, not a side effect of
31
- * rendering.
32
- */
33
21
  fetchNextPage: () => void;
34
22
  isLoading: boolean;
35
23
  isFetchingNextPage: boolean;
36
- /** True while the query has no data, including while it is disabled. */
37
24
  isPending: boolean;
38
25
  error: Error | null;
39
26
  }
40
- /**
41
- * The module list, paged explicitly.
42
- *
43
- * Deliberately *not* `useAllPages`: that helper walks every page on mount and
44
- * again on every invalidation, which is the mechanism behind Canvas's
45
- * "expand a module, refetch the course" behavior. Here one call is one page,
46
- * and `hasNextPage` is surfaced so an unfetched remainder is visible to the
47
- * caller instead of silently dropped.
48
- */
27
+ /** Not `useAllPages`: that re-walks every loaded page on each invalidation. */
49
28
  export declare function useModules(options: UseModulesOptions): UseModulesResult;
50
29
  //# sourceMappingURL=useModules.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useModules.d.ts","sourceRoot":"","sources":["../../src/hooks/useModules.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAIvD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,uFAAuF;IACvF,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB;;;OAGG;IACH,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB;;;;OAIG;IACH,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;IAClB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,wEAAwE;IACxE,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CA8CvE"}
1
+ {"version":3,"file":"useModules.d.ts","sourceRoot":"","sources":["../../src/hooks/useModules.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAIzD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;IAClB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACpB;AAED,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAgDvE"}
@@ -1,5 +1,6 @@
1
1
  import { ModulesDataAdapter } from '../adapters/types';
2
2
  import { ModulesView } from '../cache/keys';
3
+ import { FilterEntry } from '../config/schemas';
3
4
  import { Module, ModuleItem, PageInfo } from '../types/domain';
4
5
  import { ItemsMode, ResolvedItemsMode } from './useItemsMode';
5
6
  export type ModuleItemsSource = 'inline' | 'onDemand';
@@ -15,38 +16,39 @@ export interface ModuleItemsState {
15
16
  }
16
17
  export interface UseModulesPageDataOptions {
17
18
  courseId: string;
18
- /** Keep referentially stable: a new identity every render rebuilds every observer's options. */
19
19
  adapter: ModulesDataAdapter;
20
20
  view?: ModulesView;
21
- /** Defaults to `'auto'`. */
22
21
  itemsMode?: ItemsMode;
23
22
  inlineThreshold?: number;
24
23
  pageSize?: number;
25
24
  itemPageSize?: number;
26
- /** Max simultaneous per-module item requests. Defaults to 4. */
27
25
  itemConcurrency?: number;
28
- /** @see DEFAULT_RETAIN_COLLAPSED_LIMIT */
29
26
  retainCollapsedLimit?: number;
30
27
  staleTime?: number;
31
28
  initialExpandedModuleIds?: readonly string[];
29
+ initialFilter?: string;
32
30
  }
33
31
  export interface UseModulesPageDataResult {
34
32
  modules: Module[];
35
- /** Frontier of the module list. `hasNextPage` is never hidden from the caller. */
36
33
  pageInfo: PageInfo;
37
34
  hasNextPage: boolean;
38
- /** Explicit; nothing calls this for you. */
39
35
  fetchNextPage: () => void;
40
36
  isLoading: boolean;
41
37
  isFetchingNextPage: boolean;
42
38
  error: Error | null;
43
- /** `null` until the `auto` probe resolves. */
44
39
  itemsMode: ResolvedItemsMode | null;
45
40
  getItems: (moduleId: string) => ModuleItemsState;
46
41
  expandModule: (moduleId: string) => void;
47
42
  collapseModule: (moduleId: string) => void;
48
43
  toggleModule: (moduleId: string) => void;
49
44
  expandedModuleIds: readonly string[];
45
+ filter: string;
46
+ setFilter: (filter: string) => void;
47
+ filterEntry: FilterEntry | undefined;
48
+ /** Undefined when the server already narrowed. */
49
+ filterPredicate: FilterEntry['predicate'] | undefined;
50
+ /** True when a narrowing filter runs client-side and the server has more pages. */
51
+ filterResultsArePartial: boolean;
50
52
  }
51
53
  export declare function useModulesPageData(options: UseModulesPageDataOptions): UseModulesPageDataResult;
52
54
  //# sourceMappingURL=useModulesPageData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useModulesPageData.d.ts","sourceRoot":"","sources":["../../src/hooks/useModulesPageData.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAWnE,OAAO,EAAgB,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAIrF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAAA;AAErD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;IAClB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,iBAAiB,CAAA;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAA;IAChB,gGAAgG;IAChG,OAAO,EAAE,kBAAkB,CAAA;IAC3B,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,0CAA0C;IAC1C,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wBAAwB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC7C;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,kFAAkF;IAClF,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;IAClB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,8CAA8C;IAC9C,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACnC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,gBAAgB,CAAA;IAChD,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAKD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,wBAAwB,CA6N/F"}
1
+ {"version":3,"file":"useModulesPageData.d.ts","sourceRoot":"","sources":["../../src/hooks/useModulesPageData.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAKnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAWnE,OAAO,EAAgB,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAIrF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAAA;AAErD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;IAClB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,iBAAiB,CAAA;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wBAAwB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;IAClB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACnC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,gBAAgB,CAAA;IAChD,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,WAAW,EAAE,WAAW,GAAG,SAAS,CAAA;IACpC,kDAAkD;IAClD,eAAe,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,SAAS,CAAA;IACrD,mFAAmF;IACnF,uBAAuB,EAAE,OAAO,CAAA;CACjC;AAKD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,wBAAwB,CAkN/F"}