Skip to content

Commit 760eaad

Browse files
committed
reuse methods in buffer
1 parent 5b39fa3 commit 760eaad

File tree

1 file changed

+20
-60
lines changed

1 file changed

+20
-60
lines changed

packages/base/src/commands.ts

+20-60
Original file line numberDiff line numberDiff line change
@@ -343,33 +343,18 @@ export function addCommands(
343343
commands.addCommand(CommandIDs.buffer, {
344344
label: trans.__('Buffer'),
345345
isEnabled: () => {
346-
const model = tracker.currentWidget?.model;
347-
const localState = model?.sharedModel.awareness.getLocalState();
348-
349-
if (!model || !localState || !localState['selected']?.value) {
346+
const selected = getSelectedLayer(tracker);
347+
if (!selected) {
350348
return false;
351349
}
352-
353-
const selectedLayers = localState['selected'].value;
354-
355-
if (Object.keys(selectedLayers).length > 1) {
356-
return false;
357-
}
358-
359-
const layerId = Object.keys(selectedLayers)[0];
360-
const layer = model.getLayer(layerId);
361-
362-
if (!layer) {
363-
return false;
364-
}
365-
366-
const isValidLayer = ['VectorLayer', 'ShapefileLayer'].includes(
367-
layer.type
368-
);
369-
370-
return isValidLayer;
350+
return ['VectorLayer', 'ShapefileLayer'].includes(selected.selectedLayer.type);
371351
},
372352
execute: async () => {
353+
const selected = getSelectedLayer(tracker);
354+
if (!selected) {
355+
console.error('No valid selected layer.');
356+
return;
357+
}
373358
const layers = tracker.currentWidget?.model.sharedModel.layers ?? {};
374359
const sources = tracker.currentWidget?.model.sharedModel.sources ?? {};
375360

@@ -390,7 +375,7 @@ export function addCommands(
390375
const dialog = new ProcessingFormDialog({
391376
title: 'Buffer',
392377
schema: schema,
393-
model: tracker.currentWidget?.model as IJupyterGISModel,
378+
model: model,
394379
sourceData: {
395380
inputLayer: selectedLayerId,
396381
bufferDistance: 10,
@@ -422,30 +407,14 @@ export function addCommands(
422407
const sourceId = inputLayer.parameters.source;
423408
const source = sources[sourceId];
424409

425-
if (!source.parameters) {
410+
if (!source || !source.parameters) {
426411
console.error(`Source with ID ${sourceId} not found or missing path.`);
427412
return;
428413
}
429414

430-
let geojsonString: string;
431-
432-
if (source.parameters.path) {
433-
const fileContent = await loadFile({
434-
filepath: source.parameters.path,
435-
type: source.type,
436-
model: tracker.currentWidget?.model as IJupyterGISModel
437-
});
438-
439-
geojsonString =
440-
typeof fileContent === 'object'
441-
? JSON.stringify(fileContent)
442-
: fileContent;
443-
} else if (source.parameters.data) {
444-
geojsonString = JSON.stringify(source.parameters.data);
445-
} else {
446-
throw new Error(
447-
`Source ${sourceId} is missing both 'path' and 'data' parameters.`
448-
);
415+
const geojsonString = await getGeoJSONString(source, model);
416+
if (!geojsonString) {
417+
return;
449418
}
450419

451420
const fileBlob = new Blob([geojsonString], {
@@ -468,14 +437,10 @@ export function addCommands(
468437
`;
469438

470439
const options = [
471-
'-f',
472-
'GeoJSON',
473-
'-t_srs',
474-
formValues.projection,
475-
'-dialect',
476-
'SQLITE',
477-
'-sql',
478-
sqlQuery,
440+
'-f', 'GeoJSON',
441+
'-t_srs', formValues.projection,
442+
'-dialect', 'SQLITE',
443+
'-sql', sqlQuery,
479444
'output.geojson'
480445
];
481446

@@ -496,18 +461,13 @@ export function addCommands(
496461

497462
const layerModel: IJGISLayer = {
498463
type: 'VectorLayer',
499-
parameters: {
500-
source: newSourceId
501-
},
464+
parameters: { source: newSourceId },
502465
visible: true,
503466
name: inputLayer.name + ' Buffer'
504467
};
505468

506-
tracker.currentWidget?.model.sharedModel.addSource(
507-
newSourceId,
508-
sourceModel
509-
);
510-
tracker.currentWidget?.model.addLayer(UUID.uuid4(), layerModel);
469+
model.sharedModel.addSource(newSourceId, sourceModel);
470+
model.addLayer(UUID.uuid4(), layerModel);
511471
}
512472
}
513473
});

0 commit comments

Comments
 (0)