Skip to content

Commit c5c1109

Browse files
committed
Add static layerName prop to each layer type
1 parent 791db0d commit c5c1109

File tree

4 files changed

+32
-27
lines changed

4 files changed

+32
-27
lines changed

src/layers/grid-layer.ts

+16-18
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,6 @@ export interface GridLayerProps
2828
concurrency?: number;
2929
}
3030

31-
const defaultProps = {
32-
// @ts-expect-error - XRLayer props are not typed
33-
...XRLayer.defaultProps,
34-
// Special grid props
35-
loaders: { type: "array", value: [], compare: true },
36-
spacer: { type: "number", value: 5, compare: true },
37-
rows: { type: "number", value: 0, compare: true },
38-
columns: { type: "number", value: 0, compare: true },
39-
concurrency: { type: "number", value: 10, compare: false }, // set concurrency for queue
40-
text: { type: "boolean", value: false, compare: true },
41-
// Deck.gl
42-
onClick: { type: "function", value: null, compare: true },
43-
onHover: { type: "function", value: null, compare: true },
44-
};
45-
4631
function scaleBounds(width: number, height: number, translate = [0, 0], scale = 1) {
4732
const [left, top] = translate;
4833
const right = width * scale + left;
@@ -92,6 +77,22 @@ type SharedLayerState = {
9277
};
9378

9479
class GridLayer extends CompositeLayer<CompositeLayerProps & GridLayerProps> {
80+
static layerName = "VizarrGridLayer";
81+
static defaultProps = {
82+
// @ts-expect-error - XRLayer props are not typed
83+
...XRLayer.defaultProps,
84+
// Special grid props
85+
loaders: { type: "array", value: [], compare: true },
86+
spacer: { type: "number", value: 5, compare: true },
87+
rows: { type: "number", value: 0, compare: true },
88+
columns: { type: "number", value: 0, compare: true },
89+
concurrency: { type: "number", value: 10, compare: false }, // set concurrency for queue
90+
text: { type: "boolean", value: false, compare: true },
91+
// Deck.gl
92+
onClick: { type: "function", value: null, compare: true },
93+
onHover: { type: "function", value: null, compare: true },
94+
};
95+
9596
get #state(): SharedLayerState {
9697
// @ts-expect-error - typed as any by deck
9798
return this.state;
@@ -210,7 +211,4 @@ class GridLayer extends CompositeLayer<CompositeLayerProps & GridLayerProps> {
210211
}
211212
}
212213

213-
GridLayer.layerName = "GridLayer";
214-
GridLayer.defaultProps = defaultProps;
215-
216214
export { GridLayer };

src/layers/label-layer.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ type LabelPixelData = {
3636
};
3737

3838
export class LabelLayer extends TileLayer<LabelPixelData> {
39+
static layerName = "VizarrLabelLayer";
40+
3941
constructor(props: LabelLayerProps) {
4042
const resolutions = props.loader;
4143
const dimensions = getImageSize(resolutions[0]);
@@ -83,7 +85,7 @@ export class LabelLayer extends TileLayer<LabelPixelData> {
8385
}
8486

8587
export class GrayscaleBitmapLayer extends BitmapLayer<{ pixelData: LabelPixelData; lut: Float32Array }> {
86-
static layerName = "GrayscaleBitmapLayer";
88+
static layerName = "VizarrGrayscaleBitmapLayer";
8789
// @ts-expect-error - only way to extend the base state type
8890
state!: { texture: Texture } & BitmapLayer["state"];
8991

src/layers/viv-layers.ts

+2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export class MultiscaleImageLayer
3131
extends BaseMultiscaleImageLayer<string[]>
3232
implements Layer<MultiscaleImageLayerProps>
3333
{
34+
static layerName = "VizarMultiscaleImageLayer";
3435
// biome-ignore lint/complexity/noUselessConstructor: Necessary for TypeScript to get the types
3536
constructor(props: MultiscaleImageLayerProps) {
3637
// @ts-expect-error - Viv's types are not correct
@@ -44,6 +45,7 @@ export interface ImageLayerProps extends BaseLayerProps {
4445

4546
// @ts-expect-error - Viv does faithfully implement the Layer interface, just not captured in the types
4647
export class ImageLayer extends BaseImageLayer<string[]> implements Layer<ImageLayerProps> {
48+
static layerName = "VizarrImageLayer";
4749
// biome-ignore lint/complexity/noUselessConstructor: Necessary for TypeScript to get the types
4850
constructor(props: ImageLayerProps) {
4951
// @ts-expect-error - Viv's types are not correct

src/state.ts

+11-8
Original file line numberDiff line numberDiff line change
@@ -170,23 +170,26 @@ const LayerConstructors = {
170170
image: ImageLayer,
171171
multiscale: MultiscaleImageLayer,
172172
grid: GridLayer,
173-
};
173+
} as const;
174174

175175
export const layerAtoms = atom((get) => {
176176
const atoms = get(sourceInfoAtomAtoms);
177-
if (atoms.length === 0) return [];
178-
const layers = get(waitForAll(atoms.map((a) => layerFamilyAtom(get(a)))));
179-
return layers.flatMap((layer) => {
177+
if (atoms.length === 0) {
178+
return [];
179+
}
180+
const layersState = get(waitForAll(atoms.map((a) => layerFamilyAtom(get(a)))));
181+
return layersState.flatMap((layer) => {
182+
if (!layer.on) return [];
180183
const Layer = LayerConstructors[layer.kind];
181184
// @ts-expect-error - TS can't resolve that Layer & layerProps bound together
182-
let inner: Array<VizarrLayer> = !layer.on ? [] : [new Layer(layer.layerProps)];
183-
if (layer.kind === "multiscale" && layer.labels) {
185+
const layers: Array<VizarrLayer> = [new Layer(layer.layerProps)];
186+
if (layer.kind === "multiscale" && layer.labels?.on) {
184187
const { layerProps, transformSourceSelection } = layer.labels;
185188
const selection = transformSourceSelection(layer.layerProps.selections[0]);
186189
const imageLabelLayers = layerProps.map((props) => new LabelLayer({ ...props, selection }));
187190
// @ts-expect-error - TS can't resolve that Array<ImageLabelLayer> == Array<Layer<ImageLabelLayerProps>>
188-
inner.push(...imageLabelLayers);
191+
layers.push(...imageLabelLayers);
189192
}
190-
return inner;
193+
return layers;
191194
});
192195
});

0 commit comments

Comments
 (0)