Skip refresh of chlidren node.

This commit is contained in:
Paulo Gustavo Veiga 2023-03-03 09:11:19 -03:00
parent 39dd2486a5
commit 90bf53d762
3 changed files with 61 additions and 66 deletions

View File

@ -1064,9 +1064,10 @@ abstract class Topic extends NodeGraph {
workspace.append(this._outgoingLine);
const incomingLines = this.getIncomingLines();
incomingLines.forEach((line) => line.redraw());
if (!this.areChildrenShrunken()) {
const incomingLines = this.getIncomingLines();
incomingLines.forEach((line) => line.redraw());
}
result = true;
}
@ -1152,7 +1153,7 @@ abstract class Topic extends NodeGraph {
const bgColor = this.getBackgroundColor();
innerShape.setFill(bgColor);
if (redrawChildren || shapeChanged || connectionChanged) {
if ((redrawChildren || shapeChanged || connectionChanged) && !this.areChildrenShrunken()) {
this.getChildren().forEach((t) => t.redraw(true));
}
}

View File

@ -1,24 +1,24 @@
const DE = {
LOADING: 'Laden ...',
SAVING: 'Speichern ...',
SAVE_COMPLETE: 'Speichern abgeschlossen',
ZOOM_IN_ERROR: 'Vergrößerung zu hoch.',
ZOOM_ERROR: 'Es kann nicht weiter vergrößert bzw. verkleinert werden.',
ONLY_ONE_TOPIC_MUST_BE_SELECTED: 'Thema konnte nicht angelegt werden. Bitte wähle nur ein Thema aus.',
ONE_TOPIC_MUST_BE_SELECTED: 'Thema konnte nicht angelegt werden. Es muss ein Thema ausgewählt werden.',
ONLY_ONE_TOPIC_MUST_BE_SELECTED_COLLAPSE: 'Kinderknoten können nicht eingefaltet werden. Es muss ein Thema ausgewäht werden.',
SAVE_COULD_NOT_BE_COMPLETED: 'Sichern wurde nicht abgeschlossen. Versuche es später nocheinmal.',
UNEXPECTED_ERROR_LOADING: 'Es tut uns leid, ein unerwarteter Fehler ist aufgetreten.\nVersuche, den Editor neu zu laden. Falls das Problem erneut auftritt, kontaktiere uns bitte unter support@wisemapping.com.',
MAIN_TOPIC: 'Hauptthema',
SUB_TOPIC: 'Unterthema',
ISOLATED_TOPIC: 'Isoliertes Thema',
CENTRAL_TOPIC: 'Zentrales Thema',
CLIPBOARD_IS_EMPTY: 'Es gibt nichts zu kopieren. Die Zwischenablage ist leer.',
CENTRAL_TOPIC_CAN_NOT_BE_DELETED: 'Das zentrale Thema kann nicht gelöscht werden.',
RELATIONSHIP_COULD_NOT_BE_CREATED: 'Die Beziehung konnte nicht angelegt werden. Es muss erst ein Vater-Thema ausgewählt werden, um die Beziehung herzustellen.',
SESSION_EXPIRED: 'Deine Sitzung ist abgelaufen, bitte melde dich erneut an.',
CENTRAL_TOPIC_CONNECTION_STYLE_CAN_NOT_BE_CHANGED: 'Der Verbindungsstil kann für das zentrale Thema nicht geändert werden.',
CENTRAL_TOPIC_STYLE_CAN_NOT_BE_CHANGED: 'Das zentrale Thema kann nicht in den Linienstil geändert werden.',
const EN = {
LOADING: 'Loading ..',
SAVING: 'Saving ...',
SAVE_COMPLETE: 'Save completed',
ZOOM_IN_ERROR: 'Zoom too high.',
ZOOM_ERROR: 'No more zoom can be applied.',
ONLY_ONE_TOPIC_MUST_BE_SELECTED: 'Could not create a topic. Only one topic must be selected.',
ONE_TOPIC_MUST_BE_SELECTED: 'Could not create a topic. One topic must be selected.',
ONLY_ONE_TOPIC_MUST_BE_SELECTED_COLLAPSE: 'Children can not be collapsed. One topic must be selected.',
SAVE_COULD_NOT_BE_COMPLETED: 'Save could not be completed, please try again latter.',
MAIN_TOPIC: 'Main Topic',
SUB_TOPIC: 'Sub Topic',
ISOLATED_TOPIC: 'Isolated Topic',
CENTRAL_TOPIC: 'Central Topic',
ENTITIES_COULD_NOT_BE_DELETED: 'Could not delete topic or relation. At least one map entity must be selected.',
CLIPBOARD_IS_EMPTY: 'Nothing to copy. Clipboard is empty.',
CENTRAL_TOPIC_CAN_NOT_BE_DELETED: 'Central topic can not be deleted.',
RELATIONSHIP_COULD_NOT_BE_CREATED: 'Relationship could not be created. A parent relationship topic must be selected first.',
SESSION_EXPIRED: 'Your session has expired, please log-in again.',
CENTRAL_TOPIC_CONNECTION_STYLE_CAN_NOT_BE_CHANGED: 'Connection style can not be changed for central topic.',
CENTRAL_TOPIC_STYLE_CAN_NOT_BE_CHANGED: 'Central topic can not be changed to line style.',
};
export default DE;
export default EN;

View File

@ -15,11 +15,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { $assert, $defined } from '@wisemapping/core-js';
import { $assert } from '@wisemapping/core-js';
import PositionType from '../PositionType';
import SizeType from '../SizeType';
import ChildrenSorterStrategy from './ChildrenSorterStrategy';
type NodeValue = number | SizeType | PositionType | boolean;
type MapValue = {
hasChanged: boolean;
value: NodeValue | undefined;
oldValue: NodeValue | undefined;
};
type NodeKey = 'order' | 'position' | 'size' | 'freeDisplacement' | 'shrink';
class Node {
private _id: number;
@ -28,7 +36,7 @@ class Node {
private _sorter: ChildrenSorterStrategy;
private _properties;
private _properties: Map<NodeKey, MapValue>;
// eslint-disable-next-line no-use-before-define
_children!: Node[];
@ -41,7 +49,7 @@ class Node {
$assert(typeof id === 'number' && Number.isFinite(id), 'id can not be null');
this._id = id;
this._sorter = sorter;
this._properties = {};
this._properties = new Map();
this.setSize(size);
this.setPosition(position);
@ -50,27 +58,23 @@ class Node {
this._heightChanged = false;
}
/** */
getId(): number {
return this._id;
}
/** */
hasFreeDisplacementChanged() {
hasFreeDisplacementChanged(): boolean {
return this.isPropertyChanged('freeDisplacement');
}
/** */
setShrunken(value: boolean) {
setShrunken(value: boolean): void {
this.setProperty('shrink', value);
}
/** */
areChildrenShrunken() {
return this.getProperty('shrink');
areChildrenShrunken(): boolean {
return Boolean(this.getProperty('shrink'));
}
setOrder(order: number) {
setOrder(order: number): void {
$assert(
typeof order === 'number' && Number.isFinite(order),
`Order can not be null. Value:${order}`,
@ -81,25 +85,22 @@ class Node {
}
}
/** */
resetPositionState() {
const prop = this._properties.position;
resetPositionState(): void {
const prop = this._properties.get('position');
if (prop) {
prop.hasChanged = false;
}
}
/** */
resetOrderState() {
const prop = this._properties.order;
resetOrderState(): void {
const prop = this._properties.get('order');
if (prop) {
prop.hasChanged = false;
}
}
/** */
resetFreeState() {
const prop = this._properties.freeDisplacement;
resetFreeState(): void {
const prop = this._properties.get('freeDisplacement');
if (prop) {
prop.hasChanged = false;
}
@ -109,12 +110,10 @@ class Node {
return this.getProperty('order') as number;
}
/** */
hasOrderChanged() {
return this.isPropertyChanged('order');
hasOrderChanged(): boolean {
return Boolean(this.isPropertyChanged('order'));
}
/** */
hasPositionChanged() {
return this.isPropertyChanged('position');
}
@ -127,7 +126,6 @@ class Node {
return this.getProperty('position') as PositionType;
}
/** */
setSize(size: SizeType): void {
const currentSize = this.getSize();
if (
@ -140,7 +138,6 @@ class Node {
}
}
/** */
getSize(): SizeType {
return this.getProperty('size') as SizeType;
}
@ -155,7 +152,6 @@ class Node {
this.setProperty('freeDisplacement', { ...newDisplacement });
}
/** */
getFreeDisplacement(): PositionType {
const freeDisplacement = this.getProperty('freeDisplacement') as PositionType;
return freeDisplacement || { x: 0, y: 0 };
@ -173,13 +169,13 @@ class Node {
}
}
setProperty(key: string, value) {
let prop = this._properties[key];
private setProperty(key: NodeKey, value: NodeValue): void {
let prop = this._properties.get(key);
if (!prop) {
prop = {
hasChanged: false,
value: null,
oldValue: null,
value: undefined,
oldValue: undefined,
};
}
@ -189,21 +185,19 @@ class Node {
prop.value = value;
prop.hasChanged = true;
}
this._properties[key] = prop;
this._properties.set(key, prop);
}
private getProperty(key: string): null | number | PositionType | SizeType {
const prop = this._properties[key];
return $defined(prop) ? prop.value : null;
private getProperty(key: NodeKey): NodeValue | undefined {
return this._properties.get(key)?.value;
}
isPropertyChanged(key: string) {
const prop = this._properties[key];
isPropertyChanged(key: NodeKey): boolean {
const prop = this._properties.get(key);
return prop ? prop.hasChanged : false;
}
/** */
getSorter() {
getSorter(): ChildrenSorterStrategy {
return this._sorter;
}