@datalayer/core
Version:
**Datalayer Core**
89 lines (88 loc) • 3.35 kB
JavaScript
/*
* Copyright (c) 2023-2025 Datalayer, Inc.
* Distributed under the terms of the Modified BSD License.
*/
import { createStore } from 'zustand/vanilla';
import { useStore } from 'zustand';
let loadConfigurationFromServer = true;
let initialConfiguration = {
useMock: false,
whiteLabel: true,
loadConfigurationFromServer: true,
jupyterServerless: false,
iamRunUrl: 'https://prod1.datalayer.run',
runtimesRunUrl: 'https://prod1.datalayer.run',
libraryRunUrl: 'https://prod1.datalayer.run',
spacerRunUrl: 'https://prod1.datalayer.run',
aiagentsRunUrl: 'https://prod1.datalayer.run',
growthRunUrl: 'https://prod1.datalayer.run',
inboundsRunUrl: 'https://prod1.datalayer.run',
successRunUrl: 'https://prod1.datalayer.run',
supportRunUrl: 'https://prod1.datalayer.run',
launcher: {
category: 'Datalayer',
name: 'Datalayer Runtimes',
icon: 'https://raw.githubusercontent.com/datalayer/icons/main/svg/data1/jupyter-base.svg',
rank: 1
},
brand: {
name: 'Datalayer',
about: 'AI Platform for Data Analysis',
logoUrl: 'https://assets.datalayer.tech/datalayer-25.svg',
logoSquareUrl: 'https://assets.datalayer.tech/datalayer-square.png',
copyright: '© 2025 Datalayer, Inc',
docsUrl: 'https://docs.datalayer.app',
supportUrl: 'https://datalayer.app/support',
termsUrl: 'https://datalayer.app/terms',
pricingUrl: 'https://datalayer.app/pricing',
privacyUrl: 'https://datalayer.app/privacy',
}
};
// Try loading initial state from datalayer-config-data element
try {
const rawConfig = document.getElementById('datalayer-config-data');
if (rawConfig?.innerText) {
const htmlOverridingConfiguration = JSON.parse(rawConfig?.innerText || '{}');
if (htmlOverridingConfiguration.loadConfigurationFromServer != undefined) {
loadConfigurationFromServer = htmlOverridingConfiguration.loadConfigurationFromServer;
}
initialConfiguration = {
...initialConfiguration,
...htmlOverridingConfiguration,
};
console.log('Datalayer configuration loaded from HTML page', initialConfiguration);
window.document.title = `${initialConfiguration.brand.name} Ξ ${initialConfiguration.brand.about}`;
}
}
catch (error) {
console.debug('No valid configuration found in the webpage.', error);
}
export const coreStore = createStore((set, get) => ({
tab: 0.0,
getIntTab: () => Math.floor(get().tab),
setTab: (tab) => set((state) => ({ tab })),
configuration: initialConfiguration,
setConfiguration: (configuration) => {
console.log('Setting Datalayer configuration', configuration);
set(state => ({
configuration: {
...state.configuration,
...configuration
}
}));
},
version: '',
setVersion: version => {
if (version && !get().version) {
set(state => ({ version }));
}
},
loadConfigurationFromServer,
setLoadConfigurationFromServer: (loadConfigurationFromServer) => {
set(state => ({ loadConfigurationFromServer }));
},
}));
export function useCoreStore(selector) {
return useStore(coreStore, selector);
}
export default useCoreStore;