2019-01-15 18:53:27 -05:00
|
|
|
/**
|
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
|
|
* or more contributor license agreements. See the NOTICE file
|
|
|
|
* distributed with this work for additional information
|
|
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
|
|
* to you under the Apache License, Version 2.0 (the
|
|
|
|
* "License"); you may not use this file except in compliance
|
|
|
|
* with the License. You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing,
|
|
|
|
* software distributed under the License is distributed on an
|
|
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
|
|
* KIND, either express or implied. See the License for the
|
|
|
|
* specific language governing permissions and limitations
|
|
|
|
* under the License.
|
|
|
|
*/
|
2020-03-30 12:31:46 -04:00
|
|
|
import { setConfig as setHotLoaderConfig } from 'react-hot-loader';
|
2018-10-30 17:51:44 -04:00
|
|
|
import 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only';
|
2019-10-02 02:12:21 -04:00
|
|
|
import moment from 'moment';
|
2021-10-07 10:26:57 -04:00
|
|
|
// eslint-disable-next-line no-restricted-imports
|
2022-02-24 13:09:41 -05:00
|
|
|
import { configure, makeApi, supersetTheme } from '@superset-ui/core';
|
2021-02-02 06:09:49 -05:00
|
|
|
import { merge } from 'lodash';
|
2018-10-30 17:51:44 -04:00
|
|
|
import setupClient from './setup/setupClient';
|
|
|
|
import setupColors from './setup/setupColors';
|
2018-12-04 16:24:07 -05:00
|
|
|
import setupFormatters from './setup/setupFormatters';
|
2023-02-02 13:23:11 -05:00
|
|
|
import setupDashboardComponents from './setup/setupDashboardComponents';
|
2023-01-10 12:08:30 -05:00
|
|
|
import { User } from './types/bootstrapTypes';
|
2022-07-05 15:58:09 -04:00
|
|
|
import { initFeatureFlags } from './featureFlags';
|
2023-01-10 12:08:30 -05:00
|
|
|
import getBootstrapData from './utils/getBootstrapData';
|
2018-10-30 17:51:44 -04:00
|
|
|
|
2020-03-30 12:31:46 -04:00
|
|
|
if (process.env.WEBPACK_MODE === 'development') {
|
|
|
|
setHotLoaderConfig({ logLevel: 'debug', trackTailUpdates: false });
|
|
|
|
}
|
|
|
|
|
2022-01-25 19:41:32 -05:00
|
|
|
// eslint-disable-next-line import/no-mutable-exports
|
2023-01-10 12:08:30 -05:00
|
|
|
const bootstrapData = getBootstrapData();
|
2022-07-05 15:58:09 -04:00
|
|
|
|
2018-10-30 17:51:44 -04:00
|
|
|
// Configure translation
|
|
|
|
if (typeof window !== 'undefined') {
|
2023-01-10 12:08:30 -05:00
|
|
|
configure({ languagePack: bootstrapData.common.language_pack });
|
|
|
|
moment.locale(bootstrapData.common.locale);
|
2018-10-30 17:51:44 -04:00
|
|
|
} else {
|
|
|
|
configure();
|
|
|
|
}
|
|
|
|
|
2022-07-05 15:58:09 -04:00
|
|
|
// Configure feature flags
|
2023-01-10 12:08:30 -05:00
|
|
|
initFeatureFlags(bootstrapData.common.feature_flags);
|
2022-07-05 15:58:09 -04:00
|
|
|
|
2018-10-30 17:51:44 -04:00
|
|
|
// Setup SupersetClient
|
|
|
|
setupClient();
|
|
|
|
|
2021-02-02 04:31:21 -05:00
|
|
|
setupColors(
|
2023-01-10 12:08:30 -05:00
|
|
|
bootstrapData.common.extra_categorical_color_schemes,
|
|
|
|
bootstrapData.common.extra_sequential_color_schemes,
|
2021-02-02 04:31:21 -05:00
|
|
|
);
|
2018-12-04 16:24:07 -05:00
|
|
|
|
|
|
|
// Setup number formatters
|
|
|
|
setupFormatters();
|
2021-02-02 06:09:49 -05:00
|
|
|
|
2022-02-09 10:44:40 -05:00
|
|
|
setupDashboardComponents();
|
|
|
|
|
2021-02-02 06:09:49 -05:00
|
|
|
export const theme = merge(
|
|
|
|
supersetTheme,
|
2023-01-10 12:08:30 -05:00
|
|
|
bootstrapData.common.theme_overrides ?? {},
|
2021-02-02 06:09:49 -05:00
|
|
|
);
|
2022-02-24 13:09:41 -05:00
|
|
|
|
|
|
|
const getMe = makeApi<void, User>({
|
|
|
|
method: 'GET',
|
|
|
|
endpoint: '/api/v1/me/',
|
|
|
|
});
|
|
|
|
|
|
|
|
/**
|
|
|
|
* When you re-open the window, we check if you are still logged in.
|
|
|
|
* If your session expired or you signed out, we'll redirect to login.
|
|
|
|
* If you aren't logged in in the first place (!isActive), then we shouldn't do this.
|
|
|
|
*/
|
|
|
|
if (bootstrapData.user?.isActive) {
|
|
|
|
document.addEventListener('visibilitychange', () => {
|
|
|
|
// we only care about the tab becoming visible, not vice versa
|
|
|
|
if (document.visibilityState !== 'visible') return;
|
|
|
|
|
|
|
|
getMe().catch(() => {
|
|
|
|
// ignore error, SupersetClient will redirect to login on a 401
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|