react-native-roster 0.4.7 → 0.4.9
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/README.md +4 -0
- package/dist/src/components/roster/roster.types.d.ts +3 -1
- package/dist/src/components/roster/roster.types.d.ts.map +1 -1
- package/dist/src/components/roster/use-roster-press.d.ts +2 -2
- package/dist/src/components/roster/use-roster-press.d.ts.map +1 -1
- package/dist/src/components/roster/use-roster-press.js +4 -4
- package/dist/src/components/roster/use-roster-press.js.map +1 -1
- package/dist/src/components/roster/use-roster.d.ts.map +1 -1
- package/dist/src/components/roster/use-roster.js +8 -6
- package/dist/src/components/roster/use-roster.js.map +1 -1
- package/dist/src/components/schedule/schedule.types.d.ts +3 -1
- package/dist/src/components/schedule/schedule.types.d.ts.map +1 -1
- package/dist/src/components/schedule/use-schedule.d.ts.map +1 -1
- package/dist/src/components/schedule/use-schedule.js +3 -1
- package/dist/src/components/schedule/use-schedule.js.map +1 -1
- package/dist/src/core/lru.d.ts +3 -0
- package/dist/src/core/lru.d.ts.map +1 -0
- package/dist/src/core/lru.js +18 -0
- package/dist/src/core/lru.js.map +1 -0
- package/llms.txt +9 -2
- package/package.json +1 -1
- package/src/components/roster/README.md +6 -0
- package/src/components/roster/roster.types.ts +3 -0
- package/src/components/roster/use-roster-press.ts +10 -4
- package/src/components/roster/use-roster.ts +19 -5
- package/src/components/schedule/README.md +4 -0
- package/src/components/schedule/schedule.types.ts +3 -0
- package/src/components/schedule/use-schedule.ts +4 -1
- package/src/core/lru.ts +13 -0
package/README.md
CHANGED
|
@@ -262,6 +262,10 @@ datasets then cannot collide when they reuse lane IDs and versions. Omitting the
|
|
|
262
262
|
core-owned default, while deliberately reusing one identity shares target-warm coverage across
|
|
263
263
|
projections.
|
|
264
264
|
|
|
265
|
+
Every mounted `Roster`, `Schedule`, `useRoster`, and `useSchedule` surface owns an isolated
|
|
266
|
+
identity by default. Pass a stable `cacheIdentity` only when several surfaces render the same
|
|
267
|
+
dataset and should deliberately share target-warm geometry and coverage.
|
|
268
|
+
|
|
265
269
|
Minified, with peers external: `/core` is 13.6 kB and the root entry is 51.2 kB.
|
|
266
270
|
`/rrule` adds 12.9 kB of its own code plus its two dependencies, `rrule-temporal`
|
|
267
271
|
and `@js-temporal/polyfill`, which install with the package. Web runs in CI on
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ComponentType, ReactNode, RefObject } from 'react';
|
|
2
2
|
import type { LayoutChangeEvent, NativeScrollEvent, NativeSyntheticEvent, ScrollView, StyleProp, ViewStyle } from 'react-native';
|
|
3
3
|
import type { SharedValue } from 'react-native-reanimated';
|
|
4
|
-
import type { Coverage, Lane, LaneComparator, LaneFlag, LaneGeometry, Projection, Rect, Source, Window, WindowSpec } from '../../core';
|
|
4
|
+
import type { Coverage, Lane, LaneComparator, LaneFlag, LaneGeometry, Projection, Rect, ScopedCacheIdentity, Source, Window, WindowSpec } from '../../core';
|
|
5
5
|
import type { GapInput, IntervalInput } from '../layers/layers.types';
|
|
6
6
|
import type { SelectionLayoutProps } from './selection/selection-layout.types';
|
|
7
7
|
/** A selected interval: the rect input plus its absolute bounds and the view zone for formatting. */
|
|
@@ -32,6 +32,8 @@ export type RosterScroll = {
|
|
|
32
32
|
export type RosterInput = {
|
|
33
33
|
/** Retain interval selection on press, default false. Lives on RosterInput for hook consumers. */
|
|
34
34
|
selectable?: boolean;
|
|
35
|
+
/** Stable dataset cache identity; omitted gives this Roster or useRoster instance isolated ownership. */
|
|
36
|
+
cacheIdentity?: ScopedCacheIdentity;
|
|
35
37
|
lanes: Lane[];
|
|
36
38
|
windowSpec: WindowSpec;
|
|
37
39
|
minuteStep?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roster.types.d.ts","sourceRoot":"","sources":["../../../../src/components/roster/roster.types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"roster.types.d.ts","sourceRoot":"","sources":["../../../../src/components/roster/roster.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Dispatch, SetStateAction } from 'react';
|
|
2
|
-
import type { Lane, Window } from '../../core';
|
|
2
|
+
import type { Lane, ScopedCacheIdentity, Window } from '../../core';
|
|
3
3
|
import type { RosterInput, RosterModel, RosterProjection } from './roster.types';
|
|
4
4
|
export type SelectedInterval = NonNullable<RosterModel['selection']>;
|
|
5
|
-
export declare function useRosterPress(input: RosterInput, window: Window, projection: RosterProjection, width: number, selection: RosterModel['selection'], setSelected: Dispatch<SetStateAction<SelectedInterval | null>>): (lane: Lane, pointX: number, pointY: number) => void;
|
|
5
|
+
export declare function useRosterPress(input: RosterInput, window: Window, projection: RosterProjection, cacheIdentity: ScopedCacheIdentity, width: number, selection: RosterModel['selection'], setSelected: Dispatch<SetStateAction<SelectedInterval | null>>): (lane: Lane, pointX: number, pointY: number) => void;
|
|
6
6
|
//# sourceMappingURL=use-roster-press.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-roster-press.d.ts","sourceRoot":"","sources":["../../../../src/components/roster/use-roster-press.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"use-roster-press.d.ts","sourceRoot":"","sources":["../../../../src/components/roster/use-roster-press.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEjF,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;AAGrE,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,gBAAgB,EAC5B,aAAa,EAAE,mBAAmB,EAClC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,EACnC,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,UAMhC,IAAI,UAAU,MAAM,UAAU,MAAM,KAAG,IAAI,CAwD1E"}
|
|
@@ -5,13 +5,13 @@ const react_1 = require("react");
|
|
|
5
5
|
const core_1 = require("../../core");
|
|
6
6
|
const hit_test_1 = require("../../core/hit-test");
|
|
7
7
|
// Isolate the stable press ref so it does not prevent compilation of derived roster values.
|
|
8
|
-
function useRosterPress(input, window, projection, width, selection, setSelected) {
|
|
9
|
-
const currentPress = { input, window, projection, width, selection };
|
|
8
|
+
function useRosterPress(input, window, projection, cacheIdentity, width, selection, setSelected) {
|
|
9
|
+
const currentPress = { input, window, projection, cacheIdentity, width, selection };
|
|
10
10
|
const pressInput = (0, react_1.useRef)(currentPress);
|
|
11
11
|
pressInput.current = currentPress;
|
|
12
12
|
const [press] = (0, react_1.useState)(() => {
|
|
13
13
|
return function press(lane, pointX, pointY) {
|
|
14
|
-
const { input, window, projection, width, selection } = pressInput.current;
|
|
14
|
+
const { input, window, projection, cacheIdentity, width, selection } = pressInput.current;
|
|
15
15
|
const { minuteStep = 60, onIntervalPress, onGapPress, onCellPress } = input;
|
|
16
16
|
const { rowHeight, viewTimezone } = projection;
|
|
17
17
|
if (!Number.isFinite(pointX) ||
|
|
@@ -21,7 +21,7 @@ function useRosterPress(input, window, projection, width, selection, setSelected
|
|
|
21
21
|
pointY < 0 ||
|
|
22
22
|
pointY >= rowHeight)
|
|
23
23
|
return;
|
|
24
|
-
const hit = (0, hit_test_1.hitTest)(lane, (0, core_1.layoutLane)(lane, window, projection), pointX, pointY);
|
|
24
|
+
const hit = (0, hit_test_1.hitTest)(lane, (0, core_1.layoutLane)(lane, window, projection, cacheIdentity), pointX, pointY);
|
|
25
25
|
if (hit?.kind === 'interval') {
|
|
26
26
|
if (input.selectable) {
|
|
27
27
|
const layer = lane.layers.find((layer) => layer.id === hit.rect.layerId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-roster-press.js","sourceRoot":"","sources":["../../../../src/components/roster/use-roster-press.ts"],"names":[],"mappings":";;;AACA,iCAAyC;AAEzC,qCAA6D;AAC7D,kDAA8C;AAK9C,4FAA4F;AAC5F,wBACE,KAAkB,EAClB,MAAc,EACd,UAA4B,EAC5B,KAAa,EACb,SAAmC,EACnC,WAA8D;IAE9D,MAAM,YAAY,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"use-roster-press.js","sourceRoot":"","sources":["../../../../src/components/roster/use-roster-press.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-roster.d.ts","sourceRoot":"","sources":["../../../../src/components/roster/use-roster.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAoB,MAAM,gBAAgB,CAAC;AAIjF,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"use-roster.d.ts","sourceRoot":"","sources":["../../../../src/components/roster/use-roster.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAoB,MAAM,gBAAgB,CAAC;AAIjF,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAwHzD"}
|
|
@@ -8,6 +8,8 @@ const use_roster_press_1 = require("./use-roster-press");
|
|
|
8
8
|
const ticks_1 = require("./utils/ticks");
|
|
9
9
|
function useRoster(input) {
|
|
10
10
|
const { lanes, windowSpec, now = null, minuteStep = 60, sortLanes = core_1.byLabel, rowHeight = 48, pxPerMinute = 0.5, onNavigate, } = input;
|
|
11
|
+
const [ownedCacheIdentity] = (0, react_1.useState)(() => ({}));
|
|
12
|
+
const cacheIdentity = input.cacheIdentity ?? ownedCacheIdentity;
|
|
11
13
|
const [selected, setSelected] = (0, react_1.useState)(null);
|
|
12
14
|
function dismissSelection() {
|
|
13
15
|
setSelected(null);
|
|
@@ -39,20 +41,20 @@ function useRoster(input) {
|
|
|
39
41
|
? { x: (0, core_1.xAtTime)(projection, window, now), now }
|
|
40
42
|
: null;
|
|
41
43
|
const contentWidth = duration * projection.pxPerMinute;
|
|
42
|
-
const coverage = new Map(lanes.map((lane) => [lane.id, (0, core_1.coverageFor)(lane, window)]));
|
|
44
|
+
const coverage = new Map(lanes.map((lane) => [lane.id, (0, core_1.coverageFor)(lane, window, cacheIdentity)]));
|
|
43
45
|
const orderedLanes = [...lanes].sort((a, b) => sortLanes(a, b, coverage));
|
|
44
46
|
const laneState = new Map(lanes.map((lane) => [
|
|
45
47
|
lane.id,
|
|
46
48
|
{ flag: (0, core_1.flagFor)(lane, window), complete: lane.complete ?? true },
|
|
47
49
|
]));
|
|
48
50
|
function geometryFor(lane) {
|
|
49
|
-
return (0, core_1.layoutLane)(lane, window, projection);
|
|
51
|
+
return (0, core_1.layoutLane)(lane, window, projection, cacheIdentity);
|
|
50
52
|
}
|
|
51
|
-
const selection = reconcileSelection(selected, lanes, window, projection, input.selectable ?? false);
|
|
53
|
+
const selection = reconcileSelection(selected, lanes, window, projection, cacheIdentity, input.selectable ?? false);
|
|
52
54
|
// Discard invalid selection during reconciliation, before rendering any stale detail.
|
|
53
55
|
if (selected && !selection)
|
|
54
56
|
setSelected(null);
|
|
55
|
-
const press = (0, use_roster_press_1.useRosterPress)(input, window, projection, contentWidth, selection, setSelected);
|
|
57
|
+
const press = (0, use_roster_press_1.useRosterPress)(input, window, projection, cacheIdentity, contentWidth, selection, setSelected);
|
|
56
58
|
return {
|
|
57
59
|
selection,
|
|
58
60
|
dismissSelection,
|
|
@@ -93,7 +95,7 @@ function useRoster(input) {
|
|
|
93
95
|
};
|
|
94
96
|
}
|
|
95
97
|
// Match provenance and nearest bounds while preserving the stored display values.
|
|
96
|
-
function reconcileSelection(selected, lanes, window, projection, enabled) {
|
|
98
|
+
function reconcileSelection(selected, lanes, window, projection, cacheIdentity, enabled) {
|
|
97
99
|
if (selected && enabled) {
|
|
98
100
|
const lane = lanes.find((lane) => lane.id === selected.lane.id);
|
|
99
101
|
const layer = lane?.layers.find((layer) => layer.id === selected.layer.id);
|
|
@@ -101,7 +103,7 @@ function reconcileSelection(selected, lanes, window, projection, enabled) {
|
|
|
101
103
|
const sources = new Set(selected.rect.sources.map((source) => JSON.stringify([source.kind, source.id])));
|
|
102
104
|
let rect;
|
|
103
105
|
let nearest = 1;
|
|
104
|
-
for (const candidate of (0, core_1.layoutLane)(lane, window, projection).rects) {
|
|
106
|
+
for (const candidate of (0, core_1.layoutLane)(lane, window, projection, cacheIdentity).rects) {
|
|
105
107
|
if (candidate.layerId !== layer.id)
|
|
106
108
|
continue;
|
|
107
109
|
const identities = new Set(candidate.sources.map((source) => JSON.stringify([source.kind, source.id])));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-roster.js","sourceRoot":"","sources":["../../../../src/components/roster/use-roster.ts"],"names":[],"mappings":";;;AAAA,iCAAyC;AAEzC,qEAAwE;AAExE,qCAAoG;AAEpG,yDAA2E;AAC3E,yCAAyC;AAEzC,mBAA0B,KAAkB;IAC1C,MAAM,EACJ,KAAK,EACL,UAAU,EACV,GAAG,GAAG,IAAI,EACV,UAAU,GAAG,EAAE,EACf,SAAS,GAAG,cAAO,EACnB,SAAS,GAAG,EAAE,EACd,WAAW,GAAG,GAAG,EACjB,UAAU,GACX,GAAG,KAAK,CAAC;IACV,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAA0B,IAAI,CAAC,CAAC;IACxE,SAAS,gBAAgB;QACvB,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAClE,0EAA0E;IAC1E,8EAA8E;IAC9E,MAAM,CAAC,CAAC,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE,CAAC,IAAA,qCAAW,EAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,CAAC,CAAC,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE,CAAC,IAAA,qCAAW,EAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAA,cAAM,EAAa,IAAI,CAAC,CAAC;IACzC,4EAA4E;IAC5E,uEAAuE;IACvE,MAAM,WAAW,GAAG,IAAA,0CAAgB,EAAC,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,MAAM,UAAU,GAAG,IAAA,0CAAgB,EAAC,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,MAAM,MAAM,GAAG,IAAA,gBAAS,EAAC,UAAU,CAAC,CAAC;IACrC,IACE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QAChB,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC3B,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;QAClB,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;QAE7B,MAAM,IAAI,UAAU,CAAC,2DAA2D,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;IACtD,MAAM,UAAU,GAAqB;QACnC,WAAW,EAAE,YAAY;QACzB,YAAY,EAAE,UAAU,CAAC,QAAQ;QACjC,SAAS;QACT,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC;KACnF,CAAC;IACF,MAAM,OAAO,GACX,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,KAAK,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG;QACrD,CAAC,CAAC,EAAE,CAAC,EAAE,IAAA,cAAO,EAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE;QAC9C,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC;IACvD,MAAM,QAAQ,GAAG,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"use-roster.js","sourceRoot":"","sources":["../../../../src/components/roster/use-roster.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ComponentType } from 'react';
|
|
2
2
|
import type { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
-
import type { DayColumn, Lane, LaneGeometry, Projection, Rect, Source, Transition, Window, WindowSpec } from '../../core';
|
|
3
|
+
import type { DayColumn, Lane, LaneGeometry, Projection, Rect, ScopedCacheIdentity, Source, Transition, Window, WindowSpec } from '../../core';
|
|
4
4
|
import type { GapInput, IntervalInput } from '../layers/layers.types';
|
|
5
5
|
export type ScheduleWindowSpec = WindowSpec & {
|
|
6
6
|
span: 'day' | 'week';
|
|
@@ -11,6 +11,8 @@ export type ScheduleProjection = Extract<Projection, {
|
|
|
11
11
|
export type ScheduleInput = {
|
|
12
12
|
lane: Lane;
|
|
13
13
|
windowSpec: ScheduleWindowSpec;
|
|
14
|
+
/** Stable cache identity for deliberate reuse across surfaces rendering one dataset. */
|
|
15
|
+
cacheIdentity?: ScopedCacheIdentity;
|
|
14
16
|
minuteStep?: number;
|
|
15
17
|
/** Positive finite pixels per wall-clock hour; defaults to 48. */
|
|
16
18
|
pxPerHour?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.types.d.ts","sourceRoot":"","sources":["../../../../src/components/schedule/schedule.types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schedule.types.d.ts","sourceRoot":"","sources":["../../../../src/components/schedule/schedule.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-schedule.d.ts","sourceRoot":"","sources":["../../../../src/components/schedule/use-schedule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-schedule.d.ts","sourceRoot":"","sources":["../../../../src/components/schedule/use-schedule.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAsB,MAAM,kBAAkB,CAAC;AAGzF,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAsE/D"}
|
|
@@ -8,6 +8,8 @@ const use_schedule_viewport_1 = require("./use-schedule-viewport");
|
|
|
8
8
|
function useSchedule(input) {
|
|
9
9
|
const { lane, windowSpec, minuteStep = 60, pxPerHour = 48 } = input;
|
|
10
10
|
const width = (0, react_1.useContext)(use_schedule_viewport_1.ScheduleWidth);
|
|
11
|
+
const [ownedCacheIdentity] = (0, react_1.useState)(() => ({}));
|
|
12
|
+
const cacheIdentity = input.cacheIdentity ?? ownedCacheIdentity;
|
|
11
13
|
const [clock, setClock] = (0, react_1.useState)(Date.now);
|
|
12
14
|
// The current-time indicator follows the wall clock for the mounted surface's lifetime.
|
|
13
15
|
(0, react_1.useEffect)(() => {
|
|
@@ -27,7 +29,7 @@ function useSchedule(input) {
|
|
|
27
29
|
columnWidth: width / Math.max(1, days.length),
|
|
28
30
|
days,
|
|
29
31
|
};
|
|
30
|
-
const geometry = (0, core_1.layoutLane)(lane, window, projection);
|
|
32
|
+
const geometry = (0, core_1.layoutLane)(lane, window, projection, cacheIdentity);
|
|
31
33
|
const currentPress = { input, window, projection, geometry };
|
|
32
34
|
const pressInput = (0, react_1.useRef)(currentPress);
|
|
33
35
|
pressInput.current = currentPress;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-schedule.js","sourceRoot":"","sources":["../../../../src/components/schedule/use-schedule.ts"],"names":[],"mappings":";;;AAAA,iCAAgE;
|
|
1
|
+
{"version":3,"file":"use-schedule.js","sourceRoot":"","sources":["../../../../src/components/schedule/use-schedule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru.d.ts","sourceRoot":"","sources":["../../../src/core/lru.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAIjE;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMhE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.touch = touch;
|
|
4
|
+
exports.trim = trim;
|
|
5
|
+
function touch(cache, key, value) {
|
|
6
|
+
cache.delete(key);
|
|
7
|
+
cache.set(key, value);
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
function trim(cache, limit) {
|
|
11
|
+
while (cache.size > limit) {
|
|
12
|
+
const oldest = cache.keys().next();
|
|
13
|
+
if (oldest.done)
|
|
14
|
+
return;
|
|
15
|
+
cache.delete(oldest.value);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=lru.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru.js","sourceRoot":"","sources":["../../../src/core/lru.ts"],"names":[],"mappings":";;;;AAAA,eAA4B,KAAgB,EAAE,GAAM,EAAE,KAAQ;IAC5D,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,cAA2B,KAAgB,EAAE,KAAa;IACxD,OAAO,KAAK,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,MAAM,CAAC,IAAI;YAAE,OAAO;QACxB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC"}
|
package/llms.txt
CHANGED
|
@@ -189,7 +189,8 @@ Component props are ComponentType<Input>.
|
|
|
189
189
|
Roster required props: lanes: Lane[], windowSpec: WindowSpec.
|
|
190
190
|
Optional: now (epoch ms or null, default null), minuteStep (60), rowHeight (48),
|
|
191
191
|
pxPerMinute (default 0.5, positive finite, grows to fit viewport),
|
|
192
|
-
|
|
192
|
+
cacheIdentity (stable ScopedCacheIdentity for deliberate dataset sharing), sortLanes (byLabel),
|
|
193
|
+
highlightSource, onNavigate, onIntervalPress, onGapPress,
|
|
193
194
|
onCellPress, onIntervalHover (web only), style, headerStyle, laneLabelColumnStyle,
|
|
194
195
|
bodyStyle, laneLabelWidth (180), neverSetLabel, incompleteLabel, and zones below.
|
|
195
196
|
Each style prop has a className twin (className, headerClassName,
|
|
@@ -208,6 +209,8 @@ geometryFor(lane), scroll, press(lane,x,y), ticks, contentWidth, viewport,
|
|
|
208
209
|
now, nowLine, onLayout, navigate, selection, dismissSelection, and status ('empty' or 'ready'). There is no visibleRange
|
|
209
210
|
field in the shipped public model. Custom layouts must wire onLayout. Custom
|
|
210
211
|
bodies compute geometry only for mounted lanes, preserving virtualization.
|
|
212
|
+
Each Roster or useRoster instance owns an isolated cache identity when cacheIdentity is omitted.
|
|
213
|
+
Pass the same stable identity to surfaces that deliberately share one dataset.
|
|
211
214
|
now retains the raw instant. nowLine is { x, now }, using xAtTime with the fitted
|
|
212
215
|
projection.pxPerMinute scale; it is null when now is null or outside the
|
|
213
216
|
end-exclusive window. The caller owns clock updates.
|
|
@@ -218,7 +221,7 @@ windows use their exact elapsed duration, including sub-minute spans. Cell times
|
|
|
218
221
|
are clamped up to window.start and rejected at or beyond window.end.
|
|
219
222
|
|
|
220
223
|
Schedule required props: lane: Lane, windowSpec: WindowSpec & {span:'day'|'week'}.
|
|
221
|
-
Optional: minuteStep (60), pxPerHour (48, positive finite), highlightSource,
|
|
224
|
+
Optional: cacheIdentity (stable ScopedCacheIdentity), minuteStep (60), pxPerHour (48, positive finite), highlightSource,
|
|
222
225
|
onNavigate, onIntervalPress, onGapPress, onCellPress, style, headerStyle,
|
|
223
226
|
gutterStyle, daysStyle, incompleteLabel, and zones below. Class twins are
|
|
224
227
|
className, headerClassName, gutterClassName, and daysClassName. No month/custom
|
|
@@ -229,6 +232,8 @@ press(columnIndex,x,y), and status:'ready'. The standalone hook uses a 280 px gr
|
|
|
229
232
|
The chassis measures width, reserves a 48 px gutter, and fits all actual day
|
|
230
233
|
columns without horizontal scrolling; the body scrolls vertically. now updates
|
|
231
234
|
every minute and is null outside the selected window.
|
|
235
|
+
Each mounted Schedule or useSchedule surface owns an isolated cache identity by default.
|
|
236
|
+
Reuse one explicit cacheIdentity only across surfaces that render the same dataset.
|
|
232
237
|
|
|
233
238
|
Props ending in Component accept ComponentType<Input>, mounted as React elements.
|
|
234
239
|
Props ending in Zone accept ReactNode; pass null to suppress a singleton default.
|
|
@@ -412,6 +417,8 @@ projection-independent. ScopedCacheIdentity is a stable empty object whose refer
|
|
|
412
417
|
identifies one dataset. Omitted identities use the core-owned default; pass the same
|
|
413
418
|
explicit identity to share one dataset across calls and projections, and use distinct
|
|
414
419
|
identities for independent datasets whose lane IDs and versions can collide.
|
|
420
|
+
Roster resolves one instance-owned identity by default, or its cacheIdentity input when supplied,
|
|
421
|
+
and uses it for coverage, visible lane geometry, press hit-testing, and selection reconciliation.
|
|
415
422
|
flagFor(lane,window) is cheap and uncached. Geometry assembly reads fresh flag and
|
|
416
423
|
coverage outside cached rects. Repeated complete inputs retain references; treat
|
|
417
424
|
all results as read-only.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-roster",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.9",
|
|
4
4
|
"description": "Resource timeline and schedule components for React Native and web, with layered intervals, coverage, provenance, and explicit daylight-saving handling.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
@@ -43,6 +43,12 @@ with a noninteractive 2 px red line; `nowLineComponent` accepts the exported
|
|
|
43
43
|
content. Now values and component identity never enter the lane list or body
|
|
44
44
|
content key. The caller owns clock updates.
|
|
45
45
|
|
|
46
|
+
Each `Roster` or `useRoster` instance owns a stable `ScopedCacheIdentity` by default, isolating
|
|
47
|
+
datasets whose lane IDs and versions collide. The optional `cacheIdentity` input replaces that
|
|
48
|
+
owned identity so multiple surfaces can deliberately share one dataset's target-warm entries. The
|
|
49
|
+
resolved identity is used consistently for coverage, `geometryFor`, press hit-testing, and
|
|
50
|
+
selection reconciliation.
|
|
51
|
+
|
|
46
52
|
`selection/` holds the runtime-swappable presentation strategies (native popover, web popover) for one `SelectionLayoutProps` contract.
|
|
47
53
|
|
|
48
54
|
- `selection/selection-layout.types.ts`: exported `SelectionLayoutProps`, with body
|
|
@@ -16,6 +16,7 @@ import type {
|
|
|
16
16
|
LaneGeometry,
|
|
17
17
|
Projection,
|
|
18
18
|
Rect,
|
|
19
|
+
ScopedCacheIdentity,
|
|
19
20
|
Source,
|
|
20
21
|
Window,
|
|
21
22
|
WindowSpec,
|
|
@@ -45,6 +46,8 @@ export type RosterScroll = {
|
|
|
45
46
|
export type RosterInput = {
|
|
46
47
|
/** Retain interval selection on press, default false. Lives on RosterInput for hook consumers. */
|
|
47
48
|
selectable?: boolean;
|
|
49
|
+
/** Stable dataset cache identity; omitted gives this Roster or useRoster instance isolated ownership. */
|
|
50
|
+
cacheIdentity?: ScopedCacheIdentity;
|
|
48
51
|
lanes: Lane[];
|
|
49
52
|
windowSpec: WindowSpec;
|
|
50
53
|
minuteStep?: number;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Dispatch, SetStateAction } from 'react';
|
|
2
2
|
import { useRef, useState } from 'react';
|
|
3
|
-
import type { Lane, Window } from '../../core';
|
|
3
|
+
import type { Lane, ScopedCacheIdentity, Window } from '../../core';
|
|
4
4
|
import { layoutLane, snapToStep, timeAtX } from '../../core';
|
|
5
5
|
import { hitTest } from '../../core/hit-test';
|
|
6
6
|
import type { RosterInput, RosterModel, RosterProjection } from './roster.types';
|
|
@@ -12,16 +12,17 @@ export function useRosterPress(
|
|
|
12
12
|
input: RosterInput,
|
|
13
13
|
window: Window,
|
|
14
14
|
projection: RosterProjection,
|
|
15
|
+
cacheIdentity: ScopedCacheIdentity,
|
|
15
16
|
width: number,
|
|
16
17
|
selection: RosterModel['selection'],
|
|
17
18
|
setSelected: Dispatch<SetStateAction<SelectedInterval | null>>,
|
|
18
19
|
) {
|
|
19
|
-
const currentPress = { input, window, projection, width, selection };
|
|
20
|
+
const currentPress = { input, window, projection, cacheIdentity, width, selection };
|
|
20
21
|
const pressInput = useRef(currentPress);
|
|
21
22
|
pressInput.current = currentPress;
|
|
22
23
|
const [press] = useState(() => {
|
|
23
24
|
return function press(lane: Lane, pointX: number, pointY: number): void {
|
|
24
|
-
const { input, window, projection, width, selection } = pressInput.current;
|
|
25
|
+
const { input, window, projection, cacheIdentity, width, selection } = pressInput.current;
|
|
25
26
|
const { minuteStep = 60, onIntervalPress, onGapPress, onCellPress } = input;
|
|
26
27
|
const { rowHeight, viewTimezone } = projection;
|
|
27
28
|
if (
|
|
@@ -33,7 +34,12 @@ export function useRosterPress(
|
|
|
33
34
|
pointY >= rowHeight
|
|
34
35
|
)
|
|
35
36
|
return;
|
|
36
|
-
const hit = hitTest(
|
|
37
|
+
const hit = hitTest(
|
|
38
|
+
lane,
|
|
39
|
+
layoutLane(lane, window, projection, cacheIdentity),
|
|
40
|
+
pointX,
|
|
41
|
+
pointY,
|
|
42
|
+
);
|
|
37
43
|
if (hit?.kind === 'interval') {
|
|
38
44
|
if (input.selectable) {
|
|
39
45
|
const layer = lane.layers.find((layer) => layer.id === hit.rect.layerId);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useRef, useState } from 'react';
|
|
2
2
|
import type { ScrollView } from 'react-native';
|
|
3
3
|
import { makeMutable, useAnimatedStyle } from 'react-native-reanimated';
|
|
4
|
-
import type { Lane, LaneGeometry, Rect, Window } from '../../core';
|
|
4
|
+
import type { Lane, LaneGeometry, Rect, ScopedCacheIdentity, Window } from '../../core';
|
|
5
5
|
import { byLabel, coverageFor, flagFor, layoutLane, timeAtX, windowFor, xAtTime } from '../../core';
|
|
6
6
|
import type { RosterInput, RosterModel, RosterProjection } from './roster.types';
|
|
7
7
|
import { type SelectedInterval, useRosterPress } from './use-roster-press';
|
|
@@ -18,6 +18,8 @@ export function useRoster(input: RosterInput): RosterModel {
|
|
|
18
18
|
pxPerMinute = 0.5,
|
|
19
19
|
onNavigate,
|
|
20
20
|
} = input;
|
|
21
|
+
const [ownedCacheIdentity] = useState<ScopedCacheIdentity>(() => ({}));
|
|
22
|
+
const cacheIdentity = input.cacheIdentity ?? ownedCacheIdentity;
|
|
21
23
|
const [selected, setSelected] = useState<SelectedInterval | null>(null);
|
|
22
24
|
function dismissSelection() {
|
|
23
25
|
setSelected(null);
|
|
@@ -52,7 +54,9 @@ export function useRoster(input: RosterInput): RosterModel {
|
|
|
52
54
|
? { x: xAtTime(projection, window, now), now }
|
|
53
55
|
: null;
|
|
54
56
|
const contentWidth = duration * projection.pxPerMinute;
|
|
55
|
-
const coverage = new Map(
|
|
57
|
+
const coverage = new Map(
|
|
58
|
+
lanes.map((lane) => [lane.id, coverageFor(lane, window, cacheIdentity)]),
|
|
59
|
+
);
|
|
56
60
|
const orderedLanes = [...lanes].sort((a, b) => sortLanes(a, b, coverage));
|
|
57
61
|
const laneState = new Map(
|
|
58
62
|
lanes.map((lane) => [
|
|
@@ -61,18 +65,27 @@ export function useRoster(input: RosterInput): RosterModel {
|
|
|
61
65
|
]),
|
|
62
66
|
);
|
|
63
67
|
function geometryFor(lane: Lane): LaneGeometry {
|
|
64
|
-
return layoutLane(lane, window, projection);
|
|
68
|
+
return layoutLane(lane, window, projection, cacheIdentity);
|
|
65
69
|
}
|
|
66
70
|
const selection = reconcileSelection(
|
|
67
71
|
selected,
|
|
68
72
|
lanes,
|
|
69
73
|
window,
|
|
70
74
|
projection,
|
|
75
|
+
cacheIdentity,
|
|
71
76
|
input.selectable ?? false,
|
|
72
77
|
);
|
|
73
78
|
// Discard invalid selection during reconciliation, before rendering any stale detail.
|
|
74
79
|
if (selected && !selection) setSelected(null);
|
|
75
|
-
const press = useRosterPress(
|
|
80
|
+
const press = useRosterPress(
|
|
81
|
+
input,
|
|
82
|
+
window,
|
|
83
|
+
projection,
|
|
84
|
+
cacheIdentity,
|
|
85
|
+
contentWidth,
|
|
86
|
+
selection,
|
|
87
|
+
setSelected,
|
|
88
|
+
);
|
|
76
89
|
return {
|
|
77
90
|
selection,
|
|
78
91
|
dismissSelection,
|
|
@@ -122,6 +135,7 @@ function reconcileSelection(
|
|
|
122
135
|
lanes: Lane[],
|
|
123
136
|
window: Window,
|
|
124
137
|
projection: RosterProjection,
|
|
138
|
+
cacheIdentity: ScopedCacheIdentity,
|
|
125
139
|
enabled: boolean,
|
|
126
140
|
): RosterModel['selection'] {
|
|
127
141
|
if (selected && enabled) {
|
|
@@ -133,7 +147,7 @@ function reconcileSelection(
|
|
|
133
147
|
);
|
|
134
148
|
let rect: Rect | undefined;
|
|
135
149
|
let nearest = 1;
|
|
136
|
-
for (const candidate of layoutLane(lane, window, projection).rects) {
|
|
150
|
+
for (const candidate of layoutLane(lane, window, projection, cacheIdentity).rects) {
|
|
137
151
|
if (candidate.layerId !== layer.id) continue;
|
|
138
152
|
const identities = new Set(
|
|
139
153
|
candidate.sources.map((source) => JSON.stringify([source.kind, source.id])),
|
|
@@ -21,3 +21,7 @@ The chassis binds default component types once; ScheduleDay mounts components
|
|
|
21
21
|
with day data and passes nodes into ScheduleDayLayout. There is no black-box day
|
|
22
22
|
list to split: days, transitions, and rects already map in their owning parts.
|
|
23
23
|
Schedule has ten input-bearing component slots and no zero-argument singleton slots.
|
|
24
|
+
|
|
25
|
+
Each mounted `Schedule` or `useSchedule` surface owns an isolated `ScopedCacheIdentity` by default.
|
|
26
|
+
Pass one stable `cacheIdentity` to multiple surfaces only when they render the same dataset and
|
|
27
|
+
should share target-warm geometry and coverage.
|
|
@@ -6,6 +6,7 @@ import type {
|
|
|
6
6
|
LaneGeometry,
|
|
7
7
|
Projection,
|
|
8
8
|
Rect,
|
|
9
|
+
ScopedCacheIdentity,
|
|
9
10
|
Source,
|
|
10
11
|
Transition,
|
|
11
12
|
Window,
|
|
@@ -18,6 +19,8 @@ export type ScheduleProjection = Extract<Projection, { orientation: 'columns' }>
|
|
|
18
19
|
export type ScheduleInput = {
|
|
19
20
|
lane: Lane;
|
|
20
21
|
windowSpec: ScheduleWindowSpec;
|
|
22
|
+
/** Stable cache identity for deliberate reuse across surfaces rendering one dataset. */
|
|
23
|
+
cacheIdentity?: ScopedCacheIdentity;
|
|
21
24
|
minuteStep?: number;
|
|
22
25
|
/** Positive finite pixels per wall-clock hour; defaults to 48. */
|
|
23
26
|
pxPerHour?: number;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useContext, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import type { ScopedCacheIdentity } from '../../core';
|
|
2
3
|
import { dayColumnsFor, layoutLane, snapToStep, timeAtY, windowFor } from '../../core';
|
|
3
4
|
import { hitTest } from '../../core/hit-test';
|
|
4
5
|
import type { ScheduleInput, ScheduleModel, ScheduleProjection } from './schedule.types';
|
|
@@ -7,6 +8,8 @@ import { ScheduleWidth } from './use-schedule-viewport';
|
|
|
7
8
|
export function useSchedule(input: ScheduleInput): ScheduleModel {
|
|
8
9
|
const { lane, windowSpec, minuteStep = 60, pxPerHour = 48 } = input;
|
|
9
10
|
const width = useContext(ScheduleWidth);
|
|
11
|
+
const [ownedCacheIdentity] = useState<ScopedCacheIdentity>(() => ({}));
|
|
12
|
+
const cacheIdentity = input.cacheIdentity ?? ownedCacheIdentity;
|
|
10
13
|
const [clock, setClock] = useState(Date.now);
|
|
11
14
|
// The current-time indicator follows the wall clock for the mounted surface's lifetime.
|
|
12
15
|
useEffect(() => {
|
|
@@ -26,7 +29,7 @@ export function useSchedule(input: ScheduleInput): ScheduleModel {
|
|
|
26
29
|
columnWidth: width / Math.max(1, days.length),
|
|
27
30
|
days,
|
|
28
31
|
};
|
|
29
|
-
const geometry = layoutLane(lane, window, projection);
|
|
32
|
+
const geometry = layoutLane(lane, window, projection, cacheIdentity);
|
|
30
33
|
const currentPress = { input, window, projection, geometry };
|
|
31
34
|
const pressInput = useRef(currentPress);
|
|
32
35
|
pressInput.current = currentPress;
|
package/src/core/lru.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function touch<K, V>(cache: Map<K, V>, key: K, value: V): V {
|
|
2
|
+
cache.delete(key);
|
|
3
|
+
cache.set(key, value);
|
|
4
|
+
return value;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function trim<K, V>(cache: Map<K, V>, limit: number): void {
|
|
8
|
+
while (cache.size > limit) {
|
|
9
|
+
const oldest = cache.keys().next();
|
|
10
|
+
if (oldest.done) return;
|
|
11
|
+
cache.delete(oldest.value);
|
|
12
|
+
}
|
|
13
|
+
}
|