mirror of
https://github.com/google/blockly.git
synced 2026-01-09 01:50:11 +01:00
* chore: fixup procedure change event tests * feat: add running procedure change return events * fixup change return * feat: add running the procedure rename event * feat: add running procedure enable events * feat: add running parameter rename events * feat: add running procedure create events * feat: add running procedure delete events * feat: add running parameter create events * feat: add running procedure parameter delete events * chore: add types to all of the new procedure events * chore: format * chore: use type imports * chore: fix test comments * chore: add more inline docs
65 lines
2.1 KiB
TypeScript
65 lines
2.1 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2022 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import type {IParameterModel} from '../interfaces/i_parameter_model.js';
|
|
import type {IProcedureModel} from '../interfaces/i_procedure_model.js';
|
|
import {ObservableParameterModel} from '../procedures/observable_parameter_model.js';
|
|
import * as registry from '../registry.js';
|
|
import type {Workspace} from '../workspace.js';
|
|
|
|
import {ProcedureParameterBase} from './events_procedure_parameter_base.js';
|
|
import * as eventUtils from './utils.js';
|
|
|
|
|
|
/**
|
|
* Represents a parameter being added to a procedure.
|
|
*/
|
|
export class ProcedureParameterCreate extends ProcedureParameterBase {
|
|
/** A string used to check the type of the event. */
|
|
type = eventUtils.PROCEDURE_PARAMETER_CREATE;
|
|
|
|
/**
|
|
* @param parameter The parameter model that was just added to the procedure.
|
|
* @param index The index the parameter was inserted at.
|
|
*/
|
|
constructor(
|
|
workspace: Workspace, procedure: IProcedureModel,
|
|
public readonly parameter: IParameterModel,
|
|
public readonly index: number) {
|
|
super(workspace, procedure);
|
|
}
|
|
|
|
run(forward: boolean) {
|
|
const workspace = this.getEventWorkspace_();
|
|
const procedureMap = workspace.getProcedureMap();
|
|
const procedureModel = procedureMap.get(this.model.getId());
|
|
if (!procedureModel) {
|
|
throw new Error(
|
|
'Cannot add a parameter to a procedure that does not exist ' +
|
|
'in the procedure map');
|
|
}
|
|
const parameterModel = procedureModel.getParameter(this.index);
|
|
if (forward) {
|
|
if (this.parameterMatches(parameterModel)) return;
|
|
procedureModel.insertParameter(
|
|
new ObservableParameterModel(
|
|
workspace, this.parameter.getName(), this.parameter.getId()),
|
|
this.index);
|
|
} else {
|
|
if (!this.parameterMatches(parameterModel)) return;
|
|
procedureModel.deleteParameter(this.index);
|
|
}
|
|
}
|
|
|
|
parameterMatches(param: IParameterModel) {
|
|
return param && param.getId() === this.parameter.getId();
|
|
}
|
|
}
|
|
|
|
registry.register(
|
|
registry.Type.EVENT, eventUtils.PROCEDURE_PARAMETER_CREATE,
|
|
ProcedureParameterCreate);
|