Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/collaborative/ot/ot_specific.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
} from "../../helpers";
import { transformDefinition } from "../../helpers/figures/charts";
import { DEFAULT_TABLE_CONFIG } from "../../helpers/table_presets";
import { otRegistry } from "../../registries";
import { otRegistry } from "../../registries/ot_registry";
import {
AddColumnsRowsCommand,
AddMergeCommand,
Expand Down
20 changes: 16 additions & 4 deletions src/collaborative/session.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { DEBOUNCE_TIME, DEFAULT_REVISION_ID, MESSAGE_VERSION } from "../constants";
import { UuidGenerator } from "../helpers";
import { EventBus } from "../helpers/event_bus";
import { debounce, isDefined } from "../helpers/misc";
import { UuidGenerator } from "../helpers/uuid";
import { SelectiveHistory as RevisionLog } from "../history/selective_history";
import { CoreCommand, HistoryChange, Lazy, UID, WorkbookData } from "../types";
import {
Expand Down Expand Up @@ -41,6 +41,12 @@ export class Session extends EventBus<CollaborativeEvent> {
private debouncedMove: Session["move"];
private pendingMessages: StateUpdateMessage[] = [];

/**
* Stored position of the client, if session.move is called while the client is not in a session.
* Will be used to send the position to the server when the client joins.
*/
private awaitingClientPosition: ClientPosition | undefined;

private waitingAck: boolean = false;
/**
* Flag used to block all commands when an undo or redo is triggered, until
Expand Down Expand Up @@ -155,6 +161,10 @@ export class Session extends EventBus<CollaborativeEvent> {
this.clientId = "local";
}
this.transportService.onNewMessage(this.clientId, this.onMessageReceived.bind(this));
if (this.awaitingClientPosition) {
this._move(this.awaitingClientPosition);
this.awaitingClientPosition = undefined;
}
}

loadInitialMessages(messages: StateUpdateMessage[]) {
Expand Down Expand Up @@ -237,9 +247,11 @@ export class Session extends EventBus<CollaborativeEvent> {
}

private _move(position: ClientPosition) {
// this method is debounced and might be called after the client
// left the session.
if (!this.clients[this.clientId]) return;
// this method could be called before the client joins the session, or after he left (because of the debounce)
if (!this.clients[this.clientId]) {
this.awaitingClientPosition = position;
return;
}
const currentPosition = this.clients[this.clientId]?.position;
if (
currentPosition?.col === position.col &&
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { Component, onPatched, useEffect, useExternalListener, useRef, useState } from "@odoo/owl";
import { ACTION_COLOR, BOTTOMBAR_HEIGHT } from "../../../constants";
import { interactiveRenameSheet } from "../../../helpers/ui/sheet_interactive";
import { getSheetMenuRegistry } from "../../../registries";
import { MenuItemRegistry } from "../../../registries/menu_items_registry";
import { getSheetMenuRegistry } from "../../../registries/menus";
import { Store, useStore } from "../../../store_engine";
import { DOMFocusableElementStore } from "../../../stores/DOM_focus_store";
import { Rect, SpreadsheetChildEnv } from "../../../types";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Component, useEffect, useRef } from "@odoo/owl";
import { AutoCompleteProposal } from "../../../registries";
import { AutoCompleteProposal } from "../../../registries/auto_completes";
import { css } from "../../helpers/css";

css/* scss */ `
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { AutoCompleteProposal, AutoCompleteProvider } from "../../../registries";
import { AutoCompleteProposal, AutoCompleteProvider } from "../../../registries/auto_completes";
import { SpreadsheetStore } from "../../../stores";

export class AutoCompleteStore extends SpreadsheetStore {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Component } from "@odoo/owl";
import { ACTION_COLOR, GRAY_300 } from "../../../constants";
import { Token } from "../../../formulas";
import { AutoCompleteProviderDefinition } from "../../../registries";
import { AutoCompleteProviderDefinition } from "../../../registries/auto_completes";
import { Store, useLocalStore, useStore } from "../../../store_engine";
import { Color, ComposerFocusType, SpreadsheetChildEnv, UID } from "../../../types/index";
import { css, cssPropertiesToCss } from "../../helpers/css";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Token, rangeTokenize } from "../../../formulas";
import { EnrichedToken } from "../../../formulas/composer_tokenizer";
import { setXcToFixedReferenceType } from "../../../helpers/reference_type";
import { AutoCompleteProviderDefinition } from "../../../registries";
import { AutoCompleteProviderDefinition } from "../../../registries/auto_completes";
import { Get } from "../../../store_engine";
import { Color, UID, UnboundedZone, Zone } from "../../../types";
import { AbstractComposerStore } from "../composer/abstract_composer_store";
Expand Down
2 changes: 1 addition & 1 deletion src/components/figures/figure/figure.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
FIGURE_BORDER_COLOR,
SELECTION_BORDER_COLOR,
} from "../../../constants";
import { figureRegistry } from "../../../registries/index";
import { figureRegistry } from "../../../registries/figure_registry";
import {
AnchorOffset,
CSSProperties,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Component, onMounted, onWillUpdateProps, useState } from "@odoo/owl";
import { ComponentsImportance, MIN_FIG_SIZE } from "../../../constants";
import { isDefined } from "../../../helpers";
import { rectUnion } from "../../../helpers/rectangle";
import { figureRegistry } from "../../../registries";
import { figureRegistry } from "../../../registries/figure_registry";
import {
AnchorOffset,
Figure,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { Component, useExternalListener, useRef, useState } from "@odoo/owl";
import { COMPOSER_ASSISTANT_COLOR } from "../../../../../constants";
import { fuzzyLookup } from "../../../../../helpers";
import { AutoCompleteProposal, AutoCompleteProvider } from "../../../../../registries";
import {
AutoCompleteProposal,
AutoCompleteProvider,
} from "../../../../../registries/auto_completes";
import { Store, useLocalStore } from "../../../../../store_engine";
import { SpreadsheetChildEnv } from "../../../../../types";
import { PivotField } from "../../../../../types/pivot";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Component, useRef, useState } from "@odoo/owl";
import { Action, createAction } from "../../../actions/action";
import { formatNumberMenuItemSpec } from "../../../registries";
import { formatNumberMenuItemSpec } from "../../../registries/menus";
import { Rect, SpreadsheetChildEnv } from "../../../types";
import { ActionButton } from "../../action_button/action_button";
import { getBoundingRectAsPOJO } from "../../helpers/dom_helpers";
Expand Down
3 changes: 2 additions & 1 deletion src/components/top_bar/top_bar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ import {
SEPARATOR_COLOR,
TOPBAR_TOOLBAR_HEIGHT,
} from "../../constants";
import { formatNumberMenuItemSpec, topbarComponentRegistry } from "../../registries/index";
import { formatNumberMenuItemSpec } from "../../registries/menus";
import { topbarMenuRegistry } from "../../registries/menus/topbar_menu_registry";
import { topbarComponentRegistry } from "../../registries/topbar_component_registry";
import { Store, useStore } from "../../store_engine";
import { FormulaFingerprintStore } from "../../stores/formula_fingerprints_store";
import { Color, Pixel, SpreadsheetChildEnv } from "../../types/index";
Expand Down
24 changes: 13 additions & 11 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,33 +153,35 @@ import {
statefulUIPluginRegistry,
} from "./plugins/index";
import { UNDO_REDO_PIVOT_COMMANDS } from "./plugins/ui_core_views/pivot_ui";
import { autoCompleteProviders } from "./registries/auto_completes";
import { autofillModifiersRegistry } from "./registries/autofill_modifiers";
import { autofillRulesRegistry } from "./registries/autofill_rules";
import { clickableCellRegistry } from "./registries/cell_clickable_registry";
import { iconsOnCellRegistry } from "./registries/icons_on_cell_registry";
import { cellPopoverRegistry } from "./registries/cell_popovers_registry";
import {
autoCompleteProviders,
autofillModifiersRegistry,
autofillRulesRegistry,
cellMenuRegistry,
cellPopoverRegistry,
chartComponentRegistry,
chartRegistry,
chartSubtypeRegistry,
} from "./registries/chart_types";
import { figureRegistry } from "./registries/figure_registry";
import { iconsOnCellRegistry } from "./registries/icons_on_cell_registry";
import { inverseCommandRegistry } from "./registries/inverse_command_registry";
import {
cellMenuRegistry,
colMenuRegistry,
figureRegistry,
inverseCommandRegistry,
linkMenuRegistry,
numberFormatMenuRegistry,
otRegistry,
rowMenuRegistry,
topbarComponentRegistry,
topbarMenuRegistry,
} from "./registries/index";
} from "./registries/menus";
import { otRegistry } from "./registries/ot_registry";
import {
genericRepeat,
repeatCommandTransformRegistry,
repeatLocalCommandTransformRegistry,
} from "./registries/repeat_commands_registry";
import { sidePanelRegistry } from "./registries/side_panel_registry";
import { topbarComponentRegistry } from "./registries/topbar_component_registry";
import { useLocalStore, useStore, useStoreProvider } from "./store_engine";
import { DependencyContainer } from "./store_engine/dependency_container";
import { SpreadsheetStore } from "./stores";
Expand Down
3 changes: 2 additions & 1 deletion src/plugins/ui_feature/autofill.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ import {
toXC,
toZone,
} from "../../helpers/index";
import { autofillModifiersRegistry, autofillRulesRegistry } from "../../registries/index";
import { autofillModifiersRegistry } from "../../registries/autofill_modifiers";
import { autofillRulesRegistry } from "../../registries/autofill_rules";
import {
AutoFillCellCommand,
AutofillData,
Expand Down
12 changes: 0 additions & 12 deletions src/registries/index.ts

This file was deleted.

135 changes: 134 additions & 1 deletion src/registries/side_panel_registry.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,24 @@
import { ChartPanel } from "../components/side_panel/chart/main_chart_panel/main_chart_panel";
import { ConditionalFormattingPanel } from "../components/side_panel/conditional_formatting/conditional_formatting";
import { CustomCurrencyPanel } from "../components/side_panel/custom_currency/custom_currency";
import { DataValidationPanel } from "../components/side_panel/data_validation/data_validation_panel";
import { DataValidationEditor } from "../components/side_panel/data_validation/dv_editor/dv_editor";
import { FindAndReplacePanel } from "../components/side_panel/find_and_replace/find_and_replace";
import { MoreFormatsPanel } from "../components/side_panel/more_formats/more_formats";
import { PivotMeasureDisplayPanel } from "../components/side_panel/pivot/pivot_measure_display_panel/pivot_measure_display_panel";
import { PivotSidePanel } from "../components/side_panel/pivot/pivot_side_panel/pivot_side_panel";
import { RemoveDuplicatesPanel } from "../components/side_panel/remove_duplicates/remove_duplicates";
import { SettingsPanel } from "../components/side_panel/settings/settings_panel";
import { SidePanelState } from "../components/side_panel/side_panel/side_panel_store";
import { Getters, SpreadsheetChildEnv } from "../types";
import { SplitIntoColumnsPanel } from "../components/side_panel/split_to_columns_panel/split_to_columns_panel";
import { TablePanel } from "../components/side_panel/table_panel/table_panel";
import {
TableStyleEditorPanel,
TableStyleEditorPanelProps,
} from "../components/side_panel/table_style_editor_panel/table_style_editor_panel";
import { getTableTopLeft } from "../helpers/table_helpers";
import { _t } from "../translation";
import { Getters, SpreadsheetChildEnv, UID } from "../types";
import { Registry } from "./registry";

//------------------------------------------------------------------------------
Expand All @@ -18,3 +37,117 @@ export interface SidePanelContent {
}

export const sidePanelRegistry = new Registry<SidePanelContent>();

sidePanelRegistry.add("ConditionalFormatting", {
title: _t("Conditional formatting"),
Body: ConditionalFormattingPanel,
});

sidePanelRegistry.add("ChartPanel", {
title: _t("Chart"),
Body: ChartPanel,
computeState: (getters: Getters, initialProps: { figureId: UID }) => {
const figureId = getters.getSelectedFigureId() ?? initialProps.figureId;
if (!getters.isChartDefined(figureId)) {
return { isOpen: false };
}
return { isOpen: true, props: { figureId } };
},
});

sidePanelRegistry.add("FindAndReplace", {
title: _t("Find and Replace"),
Body: FindAndReplacePanel,
});

sidePanelRegistry.add("CustomCurrency", {
title: _t("Custom currency format"),
Body: CustomCurrencyPanel,
});

sidePanelRegistry.add("SplitToColumns", {
title: _t("Split text into columns"),
Body: SplitIntoColumnsPanel,
});

sidePanelRegistry.add("Settings", {
title: _t("Spreadsheet settings"),
Body: SettingsPanel,
});

sidePanelRegistry.add("RemoveDuplicates", {
title: _t("Remove duplicates"),
Body: RemoveDuplicatesPanel,
});

sidePanelRegistry.add("DataValidation", {
title: _t("Data validation"),
Body: DataValidationPanel,
});

sidePanelRegistry.add("DataValidationEditor", {
title: _t("Data validation"),
Body: DataValidationEditor,
});

sidePanelRegistry.add("MoreFormats", {
title: _t("More date formats"),
Body: MoreFormatsPanel,
});

sidePanelRegistry.add("TableSidePanel", {
title: _t("Edit table"),
Body: TablePanel,
computeState: (getters: Getters) => {
const table = getters.getFirstTableInSelection();
if (!table) {
return { isOpen: false };
}

const coreTable = getters.getCoreTable(getTableTopLeft(table));
return { isOpen: true, props: { table: coreTable }, key: table.id };
},
});

sidePanelRegistry.add("TableStyleEditorPanel", {
title: _t("Create custom table style"),
Body: TableStyleEditorPanel,
computeState: (getters: Getters, initialProps: TableStyleEditorPanelProps) => {
return {
isOpen: true,
props: { ...initialProps },
key: initialProps.styleId ?? "new",
};
},
});

sidePanelRegistry.add("PivotSidePanel", {
title: (env: SpreadsheetChildEnv, props: { pivotId: UID }) => {
return _t("Pivot #%s", env.model.getters.getPivotFormulaId(props.pivotId));
},
Body: PivotSidePanel,
computeState: (getters: Getters, props: { pivotId: UID }) => {
return {
isOpen: getters.isExistingPivot(props.pivotId),
props,
key: `pivot_key_${props.pivotId}`,
};
},
});

sidePanelRegistry.add("PivotMeasureDisplayPanel", {
title: (env: SpreadsheetChildEnv, props: PivotMeasureDisplayPanel["props"]) => {
const measure = env.model.getters.getPivot(props.pivotId).getMeasure(props.measure.id);
return _t('Measure "%s" options', measure.displayName);
},
Body: PivotMeasureDisplayPanel,
computeState: (getters: Getters, props: PivotMeasureDisplayPanel["props"]) => {
try {
// This will throw if the pivot or measure does not exist
getters.getPivot(props.pivotId).getMeasure(props.measure.id);
return { isOpen: true, props, key: "pivot_measure_display" };
} catch (e) {
return { isOpen: false };
}
},
});
Loading