react-admin-base-bootstrap 0.7.1 → 0.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/esm/Components/ExcelExportButton.d.ts +2 -1
- package/lib/esm/Components/ExcelExportButton.js +2 -2
- package/lib/esm/Components/LanguageProvider.d.ts +4 -3
- package/lib/esm/Components/LanguageProvider.js +17 -14
- package/lib/esm/Components/StepList.d.ts +2 -10
- package/lib/esm/Components/ThemeProvider.js +2 -11
- package/package.json +2 -2
- package/src/Components/ExcelExportButton.tsx +2 -2
- package/src/Components/LanguageProvider.tsx +20 -16
- package/src/Components/StepList.tsx +2 -2
- package/src/Components/ThemeProvider.tsx +1 -14
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export default function ExcelExportButton({ name, header, params, map, extra }: {
|
|
1
|
+
export default function ExcelExportButton({ name, header, params, size, map, extra }: {
|
|
2
2
|
name: any;
|
|
3
3
|
header: any;
|
|
4
4
|
params: any;
|
|
5
|
+
size: any;
|
|
5
6
|
map: any;
|
|
6
7
|
extra: any;
|
|
7
8
|
}): JSX.Element;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { useExporter } from 'react-admin-base';
|
|
3
3
|
import { Button, Col } from "reactstrap";
|
|
4
|
-
export default function ExcelExportButton({ name, header, params, map, extra }) {
|
|
4
|
+
export default function ExcelExportButton({ name, header, params, size, map, extra }) {
|
|
5
5
|
const [handleExport, loading] = useExporter(header, params, map, extra);
|
|
6
6
|
return React.createElement(Col, null,
|
|
7
|
-
React.createElement(Button, { className: "w-100 d-block", type: "button", size:
|
|
7
|
+
React.createElement(Button, { className: "w-100 d-block", type: "button", size: size, color: "success", outline: true, disabled: !!loading, onClick: () => handleExport(name) }, loading ? React.createElement("i", { className: "fas fa-spin fa-spinner" }) : React.createElement("i", { className: "fas fa-file-excel" })));
|
|
8
8
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export declare function useLanguage(): any;
|
|
2
|
-
export default function LanguageProvider({ defaultLanguage, languages, children }: {
|
|
2
|
+
export default function LanguageProvider({ defaultLanguage, languages, loader, children }: {
|
|
3
3
|
defaultLanguage: any;
|
|
4
4
|
languages: any;
|
|
5
|
+
loader: any;
|
|
5
6
|
children: any;
|
|
6
|
-
}): JSX.Element;
|
|
7
|
-
export declare function LanguageSwitcher(): JSX.Element;
|
|
7
|
+
}): JSX.Element | null;
|
|
8
|
+
export declare function LanguageSwitcher(): JSX.Element | null;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import React, { useContext,
|
|
2
|
-
import { useApp } from 'react-admin-base';
|
|
1
|
+
import React, { useContext, useMemo, useState } from 'react';
|
|
2
|
+
import { useApp, useLocalStorage } from 'react-admin-base';
|
|
3
3
|
import { IntlProvider } from 'react-intl';
|
|
4
4
|
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
|
|
5
5
|
import enMessages from '../i18n/en.json';
|
|
@@ -14,29 +14,32 @@ const LanguageContext = React.createContext(null);
|
|
|
14
14
|
export function useLanguage() {
|
|
15
15
|
return useContext(LanguageContext);
|
|
16
16
|
}
|
|
17
|
-
export default function LanguageProvider({ defaultLanguage, languages, children }) {
|
|
17
|
+
export default function LanguageProvider({ defaultLanguage, languages, loader, children }) {
|
|
18
18
|
const app = useApp();
|
|
19
|
-
const preferredLanguage = (navigator.languages && navigator.languages[0]) ||
|
|
20
|
-
|
|
21
|
-
const [lang, setLang] = useReducer((oldValue, newValue) => {
|
|
22
|
-
localStorage.setItem(app.id + "_" + 'language', newValue);
|
|
23
|
-
return newValue;
|
|
24
|
-
}, localStorage.getItem(app.id + "_" + 'language') || null);
|
|
19
|
+
const preferredLanguage = (navigator.languages && navigator.languages[0]) || navigator.language;
|
|
20
|
+
const [lang, setLang] = useLocalStorage(app.id + "_language");
|
|
25
21
|
const activeLanguageKey = (!!lang && languages[lang] && lang) || (languages[preferredLanguage] && preferredLanguage) || (languages[defaultLanguage] && defaultLanguage);
|
|
26
22
|
const activeLanguage = languages[activeLanguageKey];
|
|
27
|
-
const messages = useMemo(() => (Object.assign(Object.assign({}, (_languages[activeLanguageKey] || _languages.en)), activeLanguage.messages)), [activeLanguage]);
|
|
28
23
|
const value = useMemo(() => [activeLanguage, languages, setLang], [activeLanguage, languages, setLang]);
|
|
24
|
+
const originalMessages = (loader && loader(activeLanguage)) || activeLanguage.messages;
|
|
25
|
+
const messages = useMemo(() => originalMessages && (Object.assign(Object.assign({}, (_languages[activeLanguageKey] || _languages.en)), originalMessages)), [originalMessages, activeLanguage]);
|
|
26
|
+
if (!messages)
|
|
27
|
+
return null;
|
|
29
28
|
return React.createElement(IntlProvider, { locale: activeLanguageKey, messages: messages },
|
|
30
29
|
React.createElement(LanguageContext.Provider, { value: value }, children));
|
|
31
30
|
}
|
|
32
31
|
export function LanguageSwitcher() {
|
|
33
32
|
const [show, setShow] = useState(false);
|
|
34
33
|
const [activeLang, languages, setLanguage] = useLanguage();
|
|
34
|
+
if (Object.keys(languages).length <= 1)
|
|
35
|
+
return null;
|
|
35
36
|
return React.createElement(Dropdown, { isOpen: show, toggle: () => setShow(!show) },
|
|
36
|
-
React.createElement(DropdownToggle, { className: "nav-flag
|
|
37
|
-
React.createElement("img", { width: "20", src: activeLang.icon, alt: activeLang.name })
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
React.createElement(DropdownToggle, { className: "nav-flag", nav: true, caret: true },
|
|
38
|
+
activeLang.icon && React.createElement("img", { width: "20", className: "me-1", src: activeLang.icon, alt: activeLang.name }),
|
|
39
|
+
" ",
|
|
40
|
+
activeLang.name),
|
|
41
|
+
React.createElement(DropdownMenu, null, Object.entries(languages).map(([key, value]) => React.createElement(DropdownItem, { key: key, active: activeLang === value, onClick: () => setLanguage(key) },
|
|
42
|
+
value.icon && React.createElement("img", { width: "20", className: "me-1", src: value.icon, alt: value.name }),
|
|
40
43
|
" ",
|
|
41
44
|
React.createElement("span", { className: "align-middle" }, value.name)))));
|
|
42
45
|
}
|
|
@@ -1,10 +1,2 @@
|
|
|
1
|
-
export default function StepList({ active, setActive, children }:
|
|
2
|
-
|
|
3
|
-
setActive: any;
|
|
4
|
-
children: any;
|
|
5
|
-
}): JSX.Element;
|
|
6
|
-
export declare function StepItem({ title, translate, disabled }: {
|
|
7
|
-
title: any;
|
|
8
|
-
translate: any;
|
|
9
|
-
disabled: any;
|
|
10
|
-
}): JSX.Element;
|
|
1
|
+
export default function StepList({ active, setActive, children }: any): JSX.Element;
|
|
2
|
+
export declare function StepItem({ title, translate, disabled }: any): JSX.Element;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import React, { createContext, useContext, useEffect, useMemo
|
|
2
|
-
import {
|
|
1
|
+
import React, { createContext, useContext, useEffect, useMemo } from "react";
|
|
2
|
+
import { useLocalStorage } from "react-admin-base";
|
|
3
3
|
const ThemeContext = createContext(null);
|
|
4
4
|
const AllThemesContext = createContext(null);
|
|
5
5
|
export function useTheme() {
|
|
@@ -8,15 +8,6 @@ export function useTheme() {
|
|
|
8
8
|
export function useAllThemes() {
|
|
9
9
|
return useContext(AllThemesContext);
|
|
10
10
|
}
|
|
11
|
-
function useLocalStorage(key) {
|
|
12
|
-
const app = useApp();
|
|
13
|
-
const _key = app.id + '_' + key;
|
|
14
|
-
const previousValue = useMemo(() => localStorage.getItem(_key), [_key]);
|
|
15
|
-
return useReducer((_, newValue) => {
|
|
16
|
-
localStorage.setItem(_key, newValue);
|
|
17
|
-
return newValue;
|
|
18
|
-
}, previousValue);
|
|
19
|
-
}
|
|
20
11
|
export default function ThemeProvider({ themes, defaultTheme, children }) {
|
|
21
12
|
const state = useLocalStorage('theme');
|
|
22
13
|
const [theme, setTheme] = state;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-admin-base-bootstrap",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.4",
|
|
4
4
|
"description": "",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"modal-cropper": "^1.2.3",
|
|
38
38
|
"nprogress": "^0.2.0",
|
|
39
39
|
"prettysize": "^2.0.0",
|
|
40
|
-
"react-admin-base": "^0.7.
|
|
40
|
+
"react-admin-base": "^0.7.1",
|
|
41
41
|
"react-responsive": "^8.2.0",
|
|
42
42
|
"react-select": "^5.2.2",
|
|
43
43
|
"reactstrap": "^9.0.1",
|
|
@@ -2,10 +2,10 @@ import React from 'react';
|
|
|
2
2
|
import {useExporter} from 'react-admin-base';
|
|
3
3
|
import {Button, Col} from "reactstrap";
|
|
4
4
|
|
|
5
|
-
export default function ExcelExportButton({name, header, params, map, extra}) {
|
|
5
|
+
export default function ExcelExportButton({name, header, params, size, map, extra}) {
|
|
6
6
|
const [ handleExport, loading ] = useExporter(header, params, map, extra);
|
|
7
7
|
|
|
8
|
-
return <Col><Button className="w-100 d-block" type="button" size=
|
|
8
|
+
return <Col><Button className="w-100 d-block" type="button" size={size} color="success" outline disabled={!!loading} onClick={() => handleExport(name)}>
|
|
9
9
|
{loading ? <i className="fas fa-spin fa-spinner"/> : <i className="fas fa-file-excel"/>}
|
|
10
10
|
</Button></Col>
|
|
11
11
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
|
-
import React, { useContext,
|
|
3
|
-
import { useApp } from 'react-admin-base';
|
|
2
|
+
import React, { useContext, useMemo, useState } from 'react';
|
|
3
|
+
import { useApp, useLocalStorage } from 'react-admin-base';
|
|
4
4
|
import { IntlProvider } from 'react-intl';
|
|
5
5
|
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
|
|
6
6
|
|
|
@@ -20,23 +20,24 @@ export function useLanguage() {
|
|
|
20
20
|
return useContext(LanguageContext);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
export default function LanguageProvider({ defaultLanguage, languages, children }) {
|
|
23
|
+
export default function LanguageProvider({ defaultLanguage, languages, loader, children }) {
|
|
24
24
|
const app = useApp();
|
|
25
|
+
|
|
26
|
+
const preferredLanguage = (navigator.languages && navigator.languages[0]) || navigator.language;
|
|
25
27
|
|
|
26
|
-
const
|
|
27
|
-
navigator.language;
|
|
28
|
-
|
|
29
|
-
const [ lang, setLang ] = useReducer((oldValue, newValue) => {
|
|
30
|
-
localStorage.setItem(app.id + "_" + 'language', newValue);
|
|
31
|
-
return newValue;
|
|
32
|
-
}, localStorage.getItem(app.id + "_" + 'language') || null);
|
|
28
|
+
const [ lang, setLang ] = useLocalStorage(app.id + "_language");
|
|
33
29
|
|
|
34
30
|
const activeLanguageKey = (!!lang && languages[lang] && lang) || (languages[preferredLanguage] && preferredLanguage) || (languages[defaultLanguage] && defaultLanguage);
|
|
35
31
|
const activeLanguage = languages[activeLanguageKey];
|
|
36
|
-
|
|
37
|
-
const messages = useMemo(() => ({ ...(_languages[activeLanguageKey] || _languages.en), ...activeLanguage.messages }), [activeLanguage])
|
|
38
32
|
const value = useMemo(() => [ activeLanguage, languages, setLang], [ activeLanguage, languages, setLang]);
|
|
39
33
|
|
|
34
|
+
const originalMessages = (loader && loader(activeLanguage)) || activeLanguage.messages;
|
|
35
|
+
|
|
36
|
+
const messages = useMemo(() => originalMessages && ({ ...(_languages[activeLanguageKey] || _languages.en), ...originalMessages }), [originalMessages, activeLanguage]);
|
|
37
|
+
|
|
38
|
+
if (!messages)
|
|
39
|
+
return null;
|
|
40
|
+
|
|
40
41
|
return <IntlProvider locale={activeLanguageKey} messages={messages}>
|
|
41
42
|
<LanguageContext.Provider value={value}>
|
|
42
43
|
{ children }
|
|
@@ -47,14 +48,17 @@ export default function LanguageProvider({ defaultLanguage, languages, children
|
|
|
47
48
|
export function LanguageSwitcher() {
|
|
48
49
|
const [show, setShow] = useState(false);
|
|
49
50
|
const [ activeLang, languages, setLanguage ] = useLanguage();
|
|
51
|
+
|
|
52
|
+
if (Object.keys(languages).length <= 1)
|
|
53
|
+
return null;
|
|
50
54
|
|
|
51
55
|
return <Dropdown isOpen={show} toggle={() => setShow(!show)}>
|
|
52
|
-
<DropdownToggle className="nav-flag
|
|
53
|
-
<img width="20" src={ activeLang.icon } alt={activeLang.name} />
|
|
56
|
+
<DropdownToggle className="nav-flag" nav caret>
|
|
57
|
+
{ activeLang.icon && <img width="20" className="me-1" src={ activeLang.icon } alt={activeLang.name} /> } {activeLang.name}
|
|
54
58
|
</DropdownToggle>
|
|
55
|
-
<DropdownMenu
|
|
59
|
+
<DropdownMenu>
|
|
56
60
|
{ Object.entries(languages).map(([key, value] : any) => <DropdownItem key={key} active={activeLang === value} onClick={() => setLanguage(key)}>
|
|
57
|
-
<img width="20" src={value.icon} alt={value.name} /> <span className="align-middle">{ value.name }</span>
|
|
61
|
+
{value.icon && <img width="20" className="me-1" src={value.icon} alt={value.name} /> } <span className="align-middle">{ value.name }</span>
|
|
58
62
|
</DropdownItem>) }
|
|
59
63
|
</DropdownMenu>
|
|
60
64
|
</Dropdown>;
|
|
@@ -4,7 +4,7 @@ import { FormattedMessage } from "react-intl";
|
|
|
4
4
|
const IndexContext = React.createContext(0);
|
|
5
5
|
const OnClickDataContext = React.createContext<[number, (a: Number) => void]>(null as any);
|
|
6
6
|
|
|
7
|
-
export default function StepList({ active, setActive, children }) {
|
|
7
|
+
export default function StepList({ active, setActive, children }: any) {
|
|
8
8
|
const onClickData = useMemo<[number, (a: Number) => void]>(() => [active, setActive], [active, setActive]);
|
|
9
9
|
|
|
10
10
|
return <ul className="step step-sm step-icon-sm step step-inline step-item-between mb-3">
|
|
@@ -18,7 +18,7 @@ export default function StepList({ active, setActive, children }) {
|
|
|
18
18
|
</ul>;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
export function StepItem({ title, translate, disabled }) {
|
|
21
|
+
export function StepItem({ title, translate, disabled }: any) {
|
|
22
22
|
const index = useContext(IndexContext);
|
|
23
23
|
const [ activeStep, onClickParent ] = useContext(OnClickDataContext);
|
|
24
24
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { createContext, Dispatch, useContext, useEffect, useMemo, useReducer, useRef } from "react";
|
|
2
|
-
import { useApp } from "react-admin-base";
|
|
2
|
+
import { useApp, useLocalStorage } from "react-admin-base";
|
|
3
3
|
|
|
4
4
|
const ThemeContext = createContext(null as any);
|
|
5
5
|
const AllThemesContext = createContext(null as any);
|
|
@@ -12,19 +12,6 @@ export function useAllThemes() {
|
|
|
12
12
|
return useContext(AllThemesContext);
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
function useLocalStorage(key: string) : [string, Dispatch<string>] {
|
|
16
|
-
const app = useApp();
|
|
17
|
-
|
|
18
|
-
const _key = app.id + '_' + key;
|
|
19
|
-
|
|
20
|
-
const previousValue = useMemo(() => localStorage.getItem(_key), [_key]);
|
|
21
|
-
|
|
22
|
-
return useReducer((_: string, newValue) => {
|
|
23
|
-
localStorage.setItem(_key, newValue);
|
|
24
|
-
return newValue;
|
|
25
|
-
}, previousValue);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
15
|
export default function ThemeProvider({ themes, defaultTheme, children }) {
|
|
29
16
|
const state = useLocalStorage('theme');
|
|
30
17
|
const [ theme, setTheme ] = state;
|