You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by hu...@apache.org on 2022/02/10 02:02:30 UTC
[superset] branch xp/db-modal-anywhere updated (7325379 -> 1af7d7d)
This is an automated email from the ASF dual-hosted git repository.
hugh pushed a change to branch xp/db-modal-anywhere
in repository https://gitbox.apache.org/repos/asf/superset.git.
from 7325379 remove for testing
new d00a408 added test
add 1fbdabd feat: embedded dashboard (#18561)
add fa8c81e chore: upgrade BoundsControl to TS (#18200)
add cdfcbba refactor: migrate ExploreResultsButton component to FC & tsx (#18143)
add 41f3c95 feat: log decorator util - adding automatic logs out of the box (#18620)
add 9c08bc0 fix: change database database selector (#18609)
add 125be78 feat(chart-data-api): download multiple csvs as zip (#18618)
add fdf57cc chore: Rename and reposition native filter modal fields (#18558)
add 11d71d6 fix(helm): Fix support for ingress.ingressClassName (#18619)
add 7194a01 fix: user UUIDs on export for Native Filter Configuration (#18562)
add 51f716f refactor(ExploreCtasResultsButton): convert to functional component (#17939)
add e86f6bb fix: check embedded feature flag in request loader (#18628)
add 28e729b fix(histogram): display correct percentile value instead of formula (#18084)
add 830f2e7 feat(explore): Allow using time formatter on temporal columns in data table (#18569)
add fdbcbb5 fix(csv-export): pivot v2 with verbose names (#18633)
add 5ee070c feat: datasource access to allow more granular access to tables on SQL Lab (#18064)
add bcad1ac feat: Dynamic dashboard component (#17208)
add f03b4db feat: Improves key expiration handling in Explore (#18624)
add 00eb6b1 feat: editable title xl certified badge (#18626)
new 1af7d7d Merge branch 'master' of https://github.com/apache/superset into xp/db-modal-anywhere
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
helm/superset/Chart.yaml | 2 +-
helm/superset/values.schema.json | 3 +
.../integration/dashboard/nativeFilters.test.ts | 69 ++-
.../superset-ui-core/src/dashboard}/index.ts | 2 +-
.../superset-ui-core/src/dashboard/types/Base.ts} | 49 +-
.../packages/superset-ui-core/src/index.ts | 2 +
.../src/Histogram.jsx | 5 +-
.../spec/fixtures/mockNativeFilters.ts | 10 +-
superset-frontend/src/SqlLab/actions/sqlLab.js | 6 +-
.../components/ExploreCtasResultsButton/index.jsx | 100 ++--
.../ExploreResultsButton.test.jsx | 138 +----
.../components/ExploreResultsButton/index.jsx | 193 -------
.../components/ExploreResultsButton/index.tsx} | 55 +-
.../src/SqlLab/components/ResultSet/index.tsx | 7 +-
.../src/components/EditableTitle/index.tsx | 1 +
superset-frontend/src/constants.ts | 8 +
.../src/dashboard/actions/nativeFilters.ts | 16 +-
.../dashboard/components/BuilderComponentPane.tsx | 10 +
.../CrossFilterScopingForm/index.tsx | 4 +-
.../components/CrossFilterScopingModal/types.ts | 4 +-
.../DashboardBuilder/DashboardContainer.tsx | 3 +-
.../dashboard/components/DashboardBuilder/state.ts | 2 +-
.../dashboard/components/FiltersBadge/index.tsx | 3 +-
.../dashboard/components/FiltersBadge/selectors.ts | 8 +-
.../dashboard/components/gridComponents/Chart.jsx | 7 +-
.../components/gridComponents/DynamicComponent.tsx | 177 ++++++
.../dashboard/components/gridComponents/index.js | 4 +
.../gridComponents/new/DraggableNewComponent.jsx | 4 +-
.../new/{NewColumn.jsx => NewDynamicComponent.tsx} | 38 +-
.../menu/ShareMenuItems/ShareMenuItems.test.tsx | 2 +-
.../components/menu/ShareMenuItems/index.tsx | 8 +-
.../CascadeFilters/CascadeFilterControl/index.tsx | 9 +-
.../CascadeFilters/CascadePopover/index.tsx | 12 +-
.../FilterBar/CascadeFilters/types.ts | 3 +-
.../FilterBar/FilterConfigurationLink/index.tsx | 3 +-
.../FilterBar/FilterControls/FilterControls.tsx | 14 +-
.../FilterBar/FilterControls/state.ts | 8 +-
.../FilterBar/FilterControls/types.ts | 4 +-
.../FilterBar/FilterControls/utils.ts | 2 +-
.../FilterBar/FilterSets/EditSection.tsx | 3 +-
.../FilterBar/FilterSets/FilterSetUnit.tsx | 11 +-
.../FilterBar/FilterSets/FiltersHeader.tsx | 12 +-
.../nativeFilters/FilterBar/FilterSets/index.tsx | 15 +-
.../FilterSets/utils/findExistingFilterSet.test.ts | 2 +-
.../FilterBar/FilterSets/utils/index.ts | 4 +-
.../nativeFilters/FilterBar/Header/index.tsx | 11 +-
.../components/nativeFilters/FilterBar/index.tsx | 16 +-
.../components/nativeFilters/FilterBar/state.ts | 10 +-
.../components/nativeFilters/FilterBar/utils.ts | 9 +-
.../FiltersConfigModal/DividerConfigForm.tsx | 3 +-
.../FiltersConfigModal/FilterConfigPane.test.tsx | 4 +-
.../FiltersConfigModal/FilterConfigurePane.tsx | 3 +-
.../FiltersConfigModal/FilterTitlePane.tsx | 37 +-
.../FilterScope/FilterScope.test.tsx | 2 +-
.../FiltersConfigForm/FilterScope/FilterScope.tsx | 7 +-
.../FiltersConfigForm/FilterScope/ScopingTree.tsx | 6 +-
.../FiltersConfigForm/FilterScope/utils.ts | 14 +-
.../FiltersConfigForm/FiltersConfigForm.tsx | 624 ++++++++++-----------
.../FiltersConfigForm/getControlItemsMap.test.tsx | 5 +-
.../FiltersConfigForm/getControlItemsMap.tsx | 8 +-
.../FiltersConfigModal/FiltersConfigForm/state.ts | 9 +-
.../FiltersConfigModal/FiltersConfigModal.test.tsx | 30 +-
.../FiltersConfigModal/FiltersConfigModal.tsx | 32 +-
.../nativeFilters/FiltersConfigModal/state.ts | 2 +-
.../nativeFilters/FiltersConfigModal/types.ts | 10 +-
.../nativeFilters/FiltersConfigModal/utils.ts | 18 +-
.../dashboard/components/nativeFilters/state.ts | 2 +-
.../dashboard/components/nativeFilters/utils.ts | 12 +-
.../src/dashboard/fixtures/mockNativeFilters.ts | 8 +-
.../src/dashboard/reducers/nativeFilters.ts | 7 +-
superset-frontend/src/dashboard/reducers/types.ts | 27 +-
superset-frontend/src/dashboard/types.ts | 4 +-
.../dashboard/util/activeAllDashboardFilters.ts | 13 +-
.../util/charts/getFormDataWithExtraFilters.ts | 10 +-
.../src/dashboard/util/componentIsResizable.ts | 13 +-
.../src/dashboard/util/componentTypes.ts | 3 +
superset-frontend/src/dashboard/util/constants.ts | 1 +
.../src/dashboard/util/filterboxMigrationHelper.ts | 6 +-
.../dashboard/util/getDetailedComponentWidth.js | 2 +
.../util/getFormDataWithExtraFilters.test.ts | 2 +-
.../src/dashboard/util/isDashboardEmpty.ts | 8 +-
.../src/dashboard/util/isValidChild.ts | 5 +
.../src/dashboard/util/newComponentFactory.js | 6 +
superset-frontend/src/dataMask/actions.ts | 4 +-
superset-frontend/src/dataMask/reducer.ts | 16 +-
superset-frontend/src/dataMask/types.ts | 29 -
.../src/explore/actions/exploreActions.ts | 26 +
.../explore/components/DataTableControl/index.tsx | 205 ++++++-
.../DataTableControl/useTableColumns.test.ts | 29 +-
.../DataTablesPane/DataTablesPane.test.tsx | 16 +-
.../explore/components/DataTablesPane/index.tsx | 95 ++--
.../ExploreViewContainer.test.tsx | 15 +-
.../components/ExploreViewContainer/index.jsx | 7 +
.../explore/components/controls/BoundsControl.jsx | 129 -----
.../components/controls/BoundsControl.stories.tsx} | 41 +-
.../explore/components/controls/BoundsControl.tsx | 105 ++++
.../controls/DatasourceControl/index.jsx | 30 +-
.../components/useTimeFormattedColumns.ts} | 12 +-
.../src/explore/reducers/exploreReducer.js | 38 ++
.../src/explore/reducers/getInitialState.ts | 5 +
.../src/filters/components/GroupBy/controlPanel.ts | 9 +-
.../src/filters/components/Range/controlPanel.ts | 6 +-
.../src/filters/components/Select/controlPanel.ts | 11 +-
.../src/filters/components/Select/types.ts | 2 +-
.../src/filters/components/Time/controlPanel.ts | 6 +-
.../filters/components/TimeColumn/controlPanel.ts | 6 +-
.../filters/components/TimeGrain/controlPanel.ts | 6 +-
superset-frontend/src/preamble.ts | 3 +
.../setup/setupDasboardComponents.ts} | 18 +-
superset-frontend/src/utils/common.js | 21 +-
superset-frontend/src/utils/common.test.jsx | 67 ++-
superset-frontend/src/utils/functionalRegistry.ts | 83 +++
superset-frontend/src/utils/localStorageHelpers.ts | 2 +
.../data/database/DatabaseModal/index.test.jsx | 20 +
.../DashboardComponentsRegistry.ts | 62 ++
.../ExampleComponent/ExampleComponent.tsx} | 19 +-
.../dashboardComponents/ExampleComponent/index.ts} | 14 +-
.../visualizations/presets/dashboardComponents.ts} | 23 +-
superset/charts/data/api.py | 32 +-
superset/charts/post_processing.py | 41 +-
superset/common/query_actions.py | 8 +-
superset/dashboards/commands/importers/v1/utils.py | 6 +
superset/databases/filters.py | 19 +-
...> 5afbb1a5849b_add_embedded_dahshoard_table.py} | 35 +-
superset/security/manager.py | 30 +-
superset/utils/core.py | 59 +-
superset/views/core.py | 20 +-
superset/viz.py | 14 +-
tests/common/logger_utils.py | 174 ++++++
.../data_loading/pandas/pandas_data_loader.py | 11 +-
.../data_loading/pandas/table_df_convertor.py | 2 +
tests/integration_tests/charts/data/api_tests.py | 30 +
tests/integration_tests/core_tests.py | 59 ++
tests/integration_tests/datasets/api_tests.py | 6 +-
tests/unit_tests/core_tests.py | 53 ++
.../dashboards/commands/importers/v1/utils_test.py | 49 +-
136 files changed, 2397 insertions(+), 1462 deletions(-)
copy superset-frontend/{src/components/CronPicker => packages/superset-ui-core/src/dashboard}/index.ts (96%)
rename superset-frontend/{src/dashboard/components/nativeFilters/types.ts => packages/superset-ui-core/src/dashboard/types/Base.ts} (68%)
delete mode 100644 superset-frontend/src/SqlLab/components/ExploreResultsButton/index.jsx
copy superset-frontend/{plugins/legacy-plugin-chart-partition/test/OptionDescription.test.jsx => src/SqlLab/components/ExploreResultsButton/index.tsx} (54%)
create mode 100644 superset-frontend/src/dashboard/components/gridComponents/DynamicComponent.tsx
copy superset-frontend/src/dashboard/components/gridComponents/new/{NewColumn.jsx => NewDynamicComponent.tsx} (53%)
delete mode 100644 superset-frontend/src/dataMask/types.ts
delete mode 100644 superset-frontend/src/explore/components/controls/BoundsControl.jsx
copy superset-frontend/src/{components/Slider/Slider.stories.tsx => explore/components/controls/BoundsControl.stories.tsx} (64%)
create mode 100644 superset-frontend/src/explore/components/controls/BoundsControl.tsx
copy superset-frontend/src/{views/CRUD/data/database/state.ts => explore/components/useTimeFormattedColumns.ts} (75%)
copy superset-frontend/{packages/superset-ui-core/src/models/ExtensibleFunction.ts => src/setup/setupDasboardComponents.ts} (60%)
create mode 100644 superset-frontend/src/utils/functionalRegistry.ts
create mode 100644 superset-frontend/src/visualizations/dashboardComponents/DashboardComponentsRegistry.ts
copy superset-frontend/src/{SqlLab/components/TabStatusIcon/index.tsx => visualizations/dashboardComponents/ExampleComponent/ExampleComponent.tsx} (70%)
copy superset-frontend/src/{explore/controlPanels/timeGrainSqlaAnimationOverrides.js => visualizations/dashboardComponents/ExampleComponent/index.ts} (79%)
copy superset-frontend/{packages/superset-ui-core/src/validator/legacyValidateNumber.ts => src/visualizations/presets/dashboardComponents.ts} (70%)
copy superset/migrations/versions/{5e4a03ef0bf0_add_request_access_model.py => 5afbb1a5849b_add_embedded_dahshoard_table.py} (65%)
create mode 100644 tests/common/logger_utils.py
[superset] 01/02: added test
Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
hugh pushed a commit to branch xp/db-modal-anywhere
in repository https://gitbox.apache.org/repos/asf/superset.git
commit d00a408feb359177a4989376a2f410c92a77fac7
Author: hughhhh <hu...@gmail.com>
AuthorDate: Wed Feb 9 17:59:27 2022 -0800
added test
---
.../CRUD/data/database/DatabaseModal/index.test.jsx | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.test.jsx b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.test.jsx
index 088fd79..5e895d3 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.test.jsx
+++ b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.test.jsx
@@ -1016,4 +1016,24 @@ describe('DatabaseModal', () => {
});
});
});
+ describe('DatabaseModal w/ Deeplinking Engine', () => {
+ const renderAndWait = async () => {
+ const mounted = act(async () => {
+ render(<DatabaseModal {...dbProps} setDBEngine={'PostgreSQL'} />, {
+ useRedux: true,
+ });
+ });
+
+ return mounted;
+ };
+
+ beforeEach(async () => {
+ await renderAndWait();
+ });
+
+ it('enters step 2 of 3 when proper database is selected', () => {
+ const step2of3text = screen.getByText(/step 2 of 3/i);
+ expect(step2of3text).toBeVisible();
+ });
+ });
});
[superset] 02/02: Merge branch 'master' of https://github.com/apache/superset into xp/db-modal-anywhere
Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
hugh pushed a commit to branch xp/db-modal-anywhere
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 1af7d7daf12c35ed75ca2d27a3f00eeb5a54fd62
Merge: d00a408 00eb6b1
Author: hughhhh <hu...@gmail.com>
AuthorDate: Wed Feb 9 18:00:36 2022 -0800
Merge branch 'master' of https://github.com/apache/superset into xp/db-modal-anywhere
helm/superset/Chart.yaml | 2 +-
helm/superset/values.schema.json | 3 +
.../integration/dashboard/nativeFilters.test.ts | 69 ++-
.../superset-ui-core/src/dashboard/index.ts} | 6 +-
.../superset-ui-core/src/dashboard/types/Base.ts} | 49 +-
.../packages/superset-ui-core/src/index.ts | 2 +
.../src/Histogram.jsx | 5 +-
.../spec/fixtures/mockNativeFilters.ts | 10 +-
superset-frontend/src/SqlLab/actions/sqlLab.js | 6 +-
.../components/ExploreCtasResultsButton/index.jsx | 100 ++--
.../ExploreResultsButton.test.jsx | 138 +----
.../components/ExploreResultsButton/index.jsx | 193 -------
.../components/ExploreResultsButton/index.tsx} | 54 +-
.../src/SqlLab/components/ResultSet/index.tsx | 7 +-
.../src/components/EditableTitle/index.tsx | 1 +
superset-frontend/src/constants.ts | 8 +
.../src/dashboard/actions/nativeFilters.ts | 16 +-
.../dashboard/components/BuilderComponentPane.tsx | 10 +
.../CrossFilterScopingForm/index.tsx | 4 +-
.../components/CrossFilterScopingModal/types.ts | 4 +-
.../DashboardBuilder/DashboardContainer.tsx | 3 +-
.../dashboard/components/DashboardBuilder/state.ts | 2 +-
.../dashboard/components/FiltersBadge/index.tsx | 3 +-
.../dashboard/components/FiltersBadge/selectors.ts | 8 +-
.../dashboard/components/gridComponents/Chart.jsx | 7 +-
.../components/gridComponents/DynamicComponent.tsx | 177 ++++++
.../dashboard/components/gridComponents/index.js | 4 +
.../gridComponents/new/DraggableNewComponent.jsx | 4 +-
.../gridComponents/new/NewDynamicComponent.tsx} | 46 +-
.../menu/ShareMenuItems/ShareMenuItems.test.tsx | 2 +-
.../components/menu/ShareMenuItems/index.tsx | 8 +-
.../CascadeFilters/CascadeFilterControl/index.tsx | 9 +-
.../CascadeFilters/CascadePopover/index.tsx | 12 +-
.../FilterBar/CascadeFilters/types.ts | 3 +-
.../FilterBar/FilterConfigurationLink/index.tsx | 3 +-
.../FilterBar/FilterControls/FilterControls.tsx | 14 +-
.../FilterBar/FilterControls/state.ts | 8 +-
.../FilterBar/FilterControls/types.ts | 4 +-
.../FilterBar/FilterControls/utils.ts | 2 +-
.../FilterBar/FilterSets/EditSection.tsx | 3 +-
.../FilterBar/FilterSets/FilterSetUnit.tsx | 11 +-
.../FilterBar/FilterSets/FiltersHeader.tsx | 12 +-
.../nativeFilters/FilterBar/FilterSets/index.tsx | 15 +-
.../FilterSets/utils/findExistingFilterSet.test.ts | 2 +-
.../FilterBar/FilterSets/utils/index.ts | 4 +-
.../nativeFilters/FilterBar/Header/index.tsx | 11 +-
.../components/nativeFilters/FilterBar/index.tsx | 16 +-
.../components/nativeFilters/FilterBar/state.ts | 10 +-
.../components/nativeFilters/FilterBar/utils.ts | 9 +-
.../FiltersConfigModal/DividerConfigForm.tsx | 3 +-
.../FiltersConfigModal/FilterConfigPane.test.tsx | 4 +-
.../FiltersConfigModal/FilterConfigurePane.tsx | 3 +-
.../FiltersConfigModal/FilterTitlePane.tsx | 37 +-
.../FilterScope/FilterScope.test.tsx | 2 +-
.../FiltersConfigForm/FilterScope/FilterScope.tsx | 7 +-
.../FiltersConfigForm/FilterScope/ScopingTree.tsx | 6 +-
.../FiltersConfigForm/FilterScope/utils.ts | 14 +-
.../FiltersConfigForm/FiltersConfigForm.tsx | 624 ++++++++++-----------
.../FiltersConfigForm/getControlItemsMap.test.tsx | 5 +-
.../FiltersConfigForm/getControlItemsMap.tsx | 8 +-
.../FiltersConfigModal/FiltersConfigForm/state.ts | 9 +-
.../FiltersConfigModal/FiltersConfigModal.test.tsx | 30 +-
.../FiltersConfigModal/FiltersConfigModal.tsx | 32 +-
.../nativeFilters/FiltersConfigModal/state.ts | 2 +-
.../nativeFilters/FiltersConfigModal/types.ts | 10 +-
.../nativeFilters/FiltersConfigModal/utils.ts | 18 +-
.../dashboard/components/nativeFilters/state.ts | 2 +-
.../dashboard/components/nativeFilters/utils.ts | 12 +-
.../src/dashboard/fixtures/mockNativeFilters.ts | 8 +-
.../src/dashboard/reducers/nativeFilters.ts | 7 +-
superset-frontend/src/dashboard/reducers/types.ts | 27 +-
superset-frontend/src/dashboard/types.ts | 4 +-
.../dashboard/util/activeAllDashboardFilters.ts | 13 +-
.../util/charts/getFormDataWithExtraFilters.ts | 10 +-
.../src/dashboard/util/componentIsResizable.ts | 13 +-
.../src/dashboard/util/componentTypes.ts | 3 +
superset-frontend/src/dashboard/util/constants.ts | 1 +
.../src/dashboard/util/filterboxMigrationHelper.ts | 6 +-
.../dashboard/util/getDetailedComponentWidth.js | 2 +
.../util/getFormDataWithExtraFilters.test.ts | 2 +-
.../src/dashboard/util/isDashboardEmpty.ts | 8 +-
.../src/dashboard/util/isValidChild.ts | 5 +
.../src/dashboard/util/newComponentFactory.js | 6 +
superset-frontend/src/dataMask/actions.ts | 4 +-
superset-frontend/src/dataMask/reducer.ts | 16 +-
.../src/explore/actions/exploreActions.ts | 26 +
.../explore/components/DataTableControl/index.tsx | 205 ++++++-
.../DataTableControl/useTableColumns.test.ts | 29 +-
.../DataTablesPane/DataTablesPane.test.tsx | 16 +-
.../explore/components/DataTablesPane/index.tsx | 95 ++--
.../ExploreViewContainer.test.tsx | 15 +-
.../components/ExploreViewContainer/index.jsx | 7 +
.../explore/components/controls/BoundsControl.jsx | 129 -----
.../components/controls/BoundsControl.stories.tsx} | 57 +-
.../explore/components/controls/BoundsControl.tsx | 105 ++++
.../controls/DatasourceControl/index.jsx | 30 +-
.../components/useTimeFormattedColumns.ts} | 18 +-
.../src/explore/reducers/exploreReducer.js | 38 ++
.../src/explore/reducers/getInitialState.ts | 5 +
.../src/filters/components/GroupBy/controlPanel.ts | 9 +-
.../src/filters/components/Range/controlPanel.ts | 6 +-
.../src/filters/components/Select/controlPanel.ts | 11 +-
.../src/filters/components/Select/types.ts | 2 +-
.../src/filters/components/Time/controlPanel.ts | 6 +-
.../filters/components/TimeColumn/controlPanel.ts | 6 +-
.../filters/components/TimeGrain/controlPanel.ts | 6 +-
superset-frontend/src/preamble.ts | 3 +
.../types.ts => setup/setupDasboardComponents.ts} | 18 +-
superset-frontend/src/utils/common.js | 21 +-
superset-frontend/src/utils/common.test.jsx | 67 ++-
superset-frontend/src/utils/functionalRegistry.ts | 83 +++
superset-frontend/src/utils/localStorageHelpers.ts | 2 +
.../DashboardComponentsRegistry.ts | 62 ++
.../ExampleComponent/ExampleComponent.tsx} | 18 +-
.../dashboardComponents/ExampleComponent/index.ts} | 12 +-
.../presets/dashboardComponents.ts} | 15 +-
superset/charts/data/api.py | 32 +-
superset/charts/post_processing.py | 41 +-
superset/common/query_actions.py | 8 +-
superset/dashboards/commands/importers/v1/utils.py | 6 +
superset/databases/filters.py | 19 +-
.../5afbb1a5849b_add_embedded_dahshoard_table.py | 52 ++
superset/security/manager.py | 30 +-
superset/utils/core.py | 59 +-
superset/views/core.py | 20 +-
superset/viz.py | 14 +-
tests/common/logger_utils.py | 174 ++++++
.../data_loading/pandas/pandas_data_loader.py | 11 +-
.../data_loading/pandas/table_df_convertor.py | 2 +
tests/integration_tests/charts/data/api_tests.py | 30 +
tests/integration_tests/core_tests.py | 59 ++
tests/integration_tests/datasets/api_tests.py | 6 +-
tests/unit_tests/core_tests.py | 53 ++
.../dashboards/commands/importers/v1/utils_test.py | 49 +-
134 files changed, 2426 insertions(+), 1423 deletions(-)