Skip to content

Commit

Permalink
Merge pull request #321 from vzhyhunou/dev
Browse files Browse the repository at this point in the history
export data
  • Loading branch information
vzhyhunou committed May 20, 2023
2 parents ec087fc + a29a5e0 commit c45a1b2
Show file tree
Hide file tree
Showing 13 changed files with 101 additions and 97 deletions.
5 changes: 2 additions & 3 deletions app/src/__mocks__/react-admin.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import fakeRestProvider from '../admin/fake/rest'
import data from '../data'
import data, {dataRestProvider, getResponse} from '../data'

const apiUrl = '/api/'
const ra = require('react-admin')
const provider = fakeRestProvider(() => 'en', data)
const provider = dataRestProvider(data, getResponse(() => 'en'))

ra.fetchUtils.fetchJson = (url, options) => {
console.log(url, options)
Expand Down
13 changes: 5 additions & 8 deletions app/src/admin/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,19 @@ import {Admin} from 'react-admin';
import polyglotI18nProvider from 'ra-i18n-polyglot';

import authProvider from './auth';
import fakeAuthProvider from './fake/auth';
import {useGetLocale, useGetMessages, useLocales, useData} from '../commons';
import {useLocaleProvider, useLocales, useDataProvider} from '../commons';
import restProvider from './rest';
import fakeRestProvider from './fake/rest';
import addUploadFeature from '../commons/upload';

export default ({children, ...rest}) => {

const getLocale = useGetLocale();
const getMessages = useGetMessages();
const {getLocale, getMessages} = useLocaleProvider();
const locales = useLocales();
const data = useData();
const {data, dataRestProvider, dataAuthProvider, getResponse} = useDataProvider();

return <Admin
authProvider={data ? fakeAuthProvider(data) : authProvider}
dataProvider={addUploadFeature(data ? fakeRestProvider(getLocale, data) : restProvider(getLocale, authProvider.getToken))}
authProvider={data ? dataAuthProvider(data) : authProvider}
dataProvider={addUploadFeature(data ? dataRestProvider(data, getResponse(getLocale)) : restProvider(getLocale, authProvider.getToken))}
i18nProvider={polyglotI18nProvider(
getMessages,
getLocale(),
Expand Down
4 changes: 2 additions & 2 deletions app/src/admin/button/BulkTagButton.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ import React, {useState} from 'react';
import {Button, useResourceContext} from 'react-admin';
import {Menu, MenuItem} from '@mui/material';

import {useGetMessages} from '../../commons';
import {useLocaleProvider} from '../../commons';
import useUpdateTag from './useUpdateTag';

export default ({label, children, getData}) => {

const getMessages = useGetMessages();
const {getMessages} = useLocaleProvider();
const resource = useResourceContext();
const [anchorEl, setAnchorEl] = useState(null);
const updateTag = useUpdateTag(getData);
Expand Down
67 changes: 0 additions & 67 deletions app/src/admin/fake/rest.js

This file was deleted.

4 changes: 2 additions & 2 deletions app/src/admin/input/TagsFilter.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import React from 'react';
import {SelectArrayInput, useResourceContext} from 'react-admin';

import {useGetMessages} from '../../commons';
import {useLocaleProvider} from '../../commons';

const TagsFilter = () => {

const getMessages = useGetMessages();
const {getMessages} = useLocaleProvider();
const resource = useResourceContext();
const {tags} = getMessages().resources[resource];

Expand Down
4 changes: 2 additions & 2 deletions app/src/admin/input/TagsInput.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ import {
useResourceContext
} from 'react-admin';

import {useGetMessages} from '../../commons';
import {useLocaleProvider} from '../../commons';

export default () => {

const getMessages = useGetMessages();
const {getMessages} = useLocaleProvider();
const resource = useResourceContext();
const {tags} = getMessages().resources[resource];

Expand Down
17 changes: 8 additions & 9 deletions app/src/commons/AppContext.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,39 +6,38 @@ import React, {
} from 'react';

import i18nLoader from './locale';
import srcLoader from './data';
import dataLoader from './data';

const AppContext = createContext();

export default ({i18n, src, children, ...rest}) => {
export default ({i18n, data, children, ...rest}) => {

const [contextValues, setContextValues] = useState();

useEffect(() => {
Promise.all([
i18nLoader(i18n),
srcLoader(src)
dataLoader(data)
]).then(props => setContextValues(props));
}, [i18n, src]);
}, [i18n, data]);

if (!contextValues) {
return null;
}

let [localeProvider, data] = contextValues;
let [localeProvider, dataProvider] = contextValues;

return <AppContext.Provider value={{
localeProvider,
...rest,
data
dataProvider
}}>
{children}
</AppContext.Provider>;
};

export const useGetLocale = () => useContext(AppContext).localeProvider.getLocale;
export const useGetMessages = () => useContext(AppContext).localeProvider.getMessages;
export const useLocaleProvider = () => useContext(AppContext).localeProvider;
export const useLocales = () => useContext(AppContext).locales;
export const useComponents = () => useContext(AppContext).components;
export const useRoles = () => useContext(AppContext).roles;
export const useData = () => useContext(AppContext).data;
export const useDataProvider = () => useContext(AppContext).dataProvider;
2 changes: 1 addition & 1 deletion app/src/commons/data.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export default src => process.env.REACT_APP_DATA && src().then(r => r.default);
export default data => process.env.REACT_APP_DATA ? data().then(r => ({...r, data: r.default})) : Promise.resolve({});
2 changes: 1 addition & 1 deletion app/src/context.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ export default {
Page: PageComponent
},
i18n: locale => import(`./commons/i18n/${locale}`),
src: () => import('./data')
data: () => import('./data')
};
2 changes: 1 addition & 1 deletion app/src/admin/fake/auth.js → app/src/data/auth.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {ROLES} from '../auth';
import {ROLES} from '../admin/auth';

export default ({users}) => ({
login: ({ username, password }) => {
Expand Down
6 changes: 6 additions & 0 deletions app/src/data/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import dataRestProvider from './rest';
import dataAuthProvider from './auth';
import pages from './pages';
import users from './users';

export * from './rest';

export {dataRestProvider, dataAuthProvider};

export default {
pages,
users
Expand Down
69 changes: 69 additions & 0 deletions app/src/data/rest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import fakeDataProvider from 'ra-data-fakerest';

const log = (params, response) => {
if (console.group) {
console.groupCollapsed('exchange', JSON.stringify(params));
console.log(response);
console.groupEnd();
} else {
console.log('FakeRest request ', 'exchange', params);
console.log('FakeRest response', response);
}
};

export const getResponse = getLocale => (data, params) => {

const locale = getLocale();
const {pages} = data;
const {path} = params;
const p = path.split('/');

switch (p[0]) {
case 'pages':
switch (p[2]) {
case 'one':
const page = pages.find(({id}) => id === p[3]);
if (!page) {
return false;
}
const {id, title, content, files} = page;
return {data: {
id,
title: title[locale],
content: content[locale],
files: files && files.map(({name}) => name)
}};
case 'menu':
return {data: pages.filter(({tags}) => tags.some(({name}) => name === 'MENU'))
.map(({id, title}) => ({
id,
title: title[locale]
}))
};
default:
return false;
}
default:
return false;
}
};

export default (data, getResponse) => {

const handle = params => {
let response;
try {
response = getResponse(data, params);
} catch (error) {
console.error(error);
return Promise.reject(error);
}
log(params, response);
return Promise.resolve(response);
};

return {
...fakeDataProvider(data, true),
exchange: params => handle(params)
};
};
3 changes: 2 additions & 1 deletion app/src/main.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export * from './admin';
export * from './commons';
export * from './pages';
export * from './pages';
export * from './data';

0 comments on commit c45a1b2

Please sign in to comment.