@omniumretail/shared-resources 0.0.1

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.
Files changed (77) hide show
  1. package/.eslintrc.json +32 -0
  2. package/README.md +45 -0
  3. package/dist/bundle.js +5496 -0
  4. package/dist/types/components/BottomDrawer/index.d.ts +2 -0
  5. package/dist/types/components/Button/index.d.ts +6 -0
  6. package/dist/types/components/Footer/index.d.ts +3 -0
  7. package/dist/types/components/Form/FormInputField/index.d.ts +8 -0
  8. package/dist/types/components/Form/FormSelectField/index.d.ts +9 -0
  9. package/dist/types/components/Form/index.d.ts +2 -0
  10. package/dist/types/components/Header/index.d.ts +4 -0
  11. package/dist/types/components/Link/index.d.ts +6 -0
  12. package/dist/types/components/Navigation/index.d.ts +8 -0
  13. package/dist/types/components/Page/index.d.ts +13 -0
  14. package/dist/types/components/SharedContextProvider/index.d.ts +7 -0
  15. package/dist/types/components/index.d.ts +9 -0
  16. package/dist/types/constants/Icons.d.ts +13 -0
  17. package/dist/types/constants/QueryClient.d.ts +2 -0
  18. package/dist/types/constants/index.d.ts +2 -0
  19. package/dist/types/contexts/useStore.d.ts +8 -0
  20. package/dist/types/hooks/index.d.ts +2 -0
  21. package/dist/types/hooks/useApplicationDataQuery.hook.d.ts +2 -0
  22. package/dist/types/hooks/useStoreQuery.d.ts +7 -0
  23. package/dist/types/index.d.ts +7 -0
  24. package/dist/types/interfaces/ApplicationsByCategory.d.ts +16 -0
  25. package/dist/types/interfaces/Configuration.d.ts +6 -0
  26. package/dist/types/interfaces/Customer.d.ts +21 -0
  27. package/dist/types/interfaces/Product.d.ts +33 -0
  28. package/dist/types/interfaces/ResponseList.d.ts +5 -0
  29. package/dist/types/interfaces/Store.d.ts +7 -0
  30. package/dist/types/interfaces/index.d.ts +6 -0
  31. package/dist/types/services/ApiService/index.d.ts +5 -0
  32. package/dist/types/services/InitService/index.d.ts +3 -0
  33. package/dist/types/services/index.d.ts +2 -0
  34. package/package.json +54 -0
  35. package/src/assets/omniu-retail_branco_s-fundo.png +0 -0
  36. package/src/assets/sitoo.svg +9 -0
  37. package/src/components/BottomDrawer/index.tsx +8 -0
  38. package/src/components/BottomDrawer/styles.module.scss +37 -0
  39. package/src/components/Button/index.tsx +22 -0
  40. package/src/components/Button/styles.module.scss +67 -0
  41. package/src/components/Footer/index.tsx +44 -0
  42. package/src/components/Footer/styles.module.scss +33 -0
  43. package/src/components/Form/FormInputField/index.tsx +18 -0
  44. package/src/components/Form/FormSelectField/index.tsx +16 -0
  45. package/src/components/Form/index.ts +2 -0
  46. package/src/components/Header/index.tsx +20 -0
  47. package/src/components/Header/styles.module.scss +16 -0
  48. package/src/components/Link/index.tsx +21 -0
  49. package/src/components/Link/styles.module.scss +24 -0
  50. package/src/components/Navigation/index.tsx +30 -0
  51. package/src/components/Navigation/styles.module.scss +34 -0
  52. package/src/components/Page/index.tsx +35 -0
  53. package/src/components/Page/styles.module.scss +26 -0
  54. package/src/components/SharedContextProvider/index.tsx +30 -0
  55. package/src/components/index.ts +9 -0
  56. package/src/constants/Icons.ts +19 -0
  57. package/src/constants/QueryClient.ts +3 -0
  58. package/src/constants/index.ts +2 -0
  59. package/src/contexts/useStore.tsx +20 -0
  60. package/src/global.scss +124 -0
  61. package/src/hooks/index.ts +2 -0
  62. package/src/hooks/useApplicationDataQuery.hook.ts +10 -0
  63. package/src/hooks/useStoreQuery.ts +13 -0
  64. package/src/index.ts +9 -0
  65. package/src/interfaces/ApplicationsByCategory.ts +19 -0
  66. package/src/interfaces/Configuration.ts +7 -0
  67. package/src/interfaces/Customer.ts +23 -0
  68. package/src/interfaces/Product.ts +36 -0
  69. package/src/interfaces/ResponseList.ts +6 -0
  70. package/src/interfaces/Store.ts +8 -0
  71. package/src/interfaces/index.ts +6 -0
  72. package/src/services/ApiService/index.ts +80 -0
  73. package/src/services/InitService/index.ts +7 -0
  74. package/src/services/index.ts +3 -0
  75. package/src/types/Global.d.ts +4 -0
  76. package/tsconfig.json +26 -0
  77. package/webpack.config.js +48 -0
@@ -0,0 +1,2 @@
1
+ import { DrawerProps } from "antd";
2
+ export declare const BottomDrawer: (props: DrawerProps) => JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { ButtonProps } from 'antd';
2
+ export interface CustomButtonProps extends ButtonProps {
3
+ iconAlignRight?: boolean;
4
+ buttonStyle?: string;
5
+ }
6
+ export declare const Button: (props: CustomButtonProps) => JSX.Element;
@@ -0,0 +1,3 @@
1
+ export declare const FooterComponent: ({ className }: {
2
+ className?: string;
3
+ }) => JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { FormItemProps, InputProps } from 'antd';
2
+ interface FormInputFieldProps extends Omit<FormItemProps, "name"> {
3
+ name: string;
4
+ inputProps?: InputProps;
5
+ }
6
+ export declare const InputField: (inputProps: InputProps) => JSX.Element;
7
+ export declare const FormInputField: ({ inputProps, ...itemProps }: FormInputFieldProps) => JSX.Element;
8
+ export {};
@@ -0,0 +1,9 @@
1
+ import { FormItemProps } from 'antd';
2
+ import { LabeledValue, SelectProps } from 'antd/lib/select';
3
+ interface FormSelectFieldProps extends Omit<FormItemProps, "name"> {
4
+ name: string;
5
+ options: LabeledValue[];
6
+ selectProps?: SelectProps<LabeledValue>;
7
+ }
8
+ export declare const FormSelectField: ({ options, selectProps, ...itemProps }: FormSelectFieldProps) => JSX.Element;
9
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from './FormInputField';
2
+ export * from './FormSelectField';
@@ -0,0 +1,4 @@
1
+ export interface HeaderProps {
2
+ onOpenMenu: () => void;
3
+ }
4
+ export declare const Header: ({ onOpenMenu }: HeaderProps) => JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { ButtonProps } from 'antd';
2
+ export interface CustomLinkProps extends ButtonProps {
3
+ iconAlignRight?: boolean;
4
+ linkSecondary?: boolean;
5
+ }
6
+ export declare const Link: (props: CustomLinkProps) => JSX.Element;
@@ -0,0 +1,8 @@
1
+ export interface NavigationProps {
2
+ backLink?: boolean;
3
+ title: string;
4
+ homeLink?: boolean;
5
+ loginLink?: boolean;
6
+ onClickFunction?: () => void;
7
+ }
8
+ export declare const Navigation: (props: NavigationProps) => JSX.Element;
@@ -0,0 +1,13 @@
1
+ /// <reference types="react" />
2
+ interface PageContentProps extends PageBaseProps {
3
+ isLoading?: boolean;
4
+ }
5
+ interface PageBaseProps {
6
+ children?: React.ReactNode | React.ReactNode[];
7
+ }
8
+ export declare const Page: {
9
+ ({ children }: PageBaseProps): JSX.Element;
10
+ Header: ({ children }: PageBaseProps) => JSX.Element;
11
+ Content: ({ children, isLoading }: PageContentProps) => JSX.Element;
12
+ };
13
+ export {};
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ export interface SharedContextProviderProps {
3
+ providers?: React.JSXElementConstructor<unknown>[];
4
+ children?: React.ReactElement | React.ReactElement[];
5
+ disableInitialStoreRequest?: boolean;
6
+ }
7
+ export declare const SharedContextProvider: ({ children, disableInitialStoreRequest }: SharedContextProviderProps) => JSX.Element;
@@ -0,0 +1,9 @@
1
+ export * from './SharedContextProvider';
2
+ export * from './Header';
3
+ export * from './Footer';
4
+ export * from './Page';
5
+ export * from './Button';
6
+ export * from './BottomDrawer';
7
+ export * from './Form';
8
+ export * from './Link';
9
+ export * from './Navigation';
@@ -0,0 +1,13 @@
1
+ export declare const icons: {
2
+ faBars: import("@fortawesome/fontawesome-common-types").IconDefinition;
3
+ faUser: import("@fortawesome/fontawesome-common-types").IconDefinition;
4
+ faUserTie: import("@fortawesome/fontawesome-common-types").IconDefinition;
5
+ faPlus: import("@fortawesome/fontawesome-common-types").IconDefinition;
6
+ faUserPlus: import("@fortawesome/fontawesome-common-types").IconDefinition;
7
+ faXmark: import("@fortawesome/fontawesome-common-types").IconDefinition;
8
+ faCartShopping: import("@fortawesome/fontawesome-common-types").IconDefinition;
9
+ faChevronDown: import("@fortawesome/fontawesome-common-types").IconDefinition;
10
+ faFilter: import("@fortawesome/fontawesome-common-types").IconDefinition;
11
+ faSearch: import("@fortawesome/fontawesome-common-types").IconDefinition;
12
+ faQrcode: import("@fortawesome/fontawesome-common-types").IconDefinition;
13
+ };
@@ -0,0 +1,2 @@
1
+ import { QueryClient } from "@tanstack/react-query";
2
+ export declare const queryClient: QueryClient;
@@ -0,0 +1,2 @@
1
+ export * from './QueryClient';
2
+ export * from './Icons';
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { Store } from '../interfaces/Store';
3
+ declare const StoreProvider: ({ children, disableInitialStoreRequest }: {
4
+ disableInitialStoreRequest?: boolean;
5
+ children: React.ReactElement | React.ReactElement[];
6
+ }) => JSX.Element;
7
+ declare const useStoreContext: () => Store;
8
+ export { StoreProvider, useStoreContext };
@@ -0,0 +1,2 @@
1
+ export * from './useApplicationDataQuery.hook';
2
+ export * from './useStoreQuery';
@@ -0,0 +1,2 @@
1
+ import { ApplicationsByCategory, ResponseList } from "../interfaces";
2
+ export declare function useApplicationDataQueryHook(): import("@tanstack/react-query").UseQueryResult<ResponseList<"Categories", ApplicationsByCategory>, unknown>;
@@ -0,0 +1,7 @@
1
+ import { UseQueryOptions } from "@tanstack/react-query";
2
+ import { Store } from "../interfaces/Store";
3
+ interface StoreQueryProps extends UseQueryOptions<Store> {
4
+ id: string;
5
+ }
6
+ export declare const useStoreQuery: ({ id, ...options }: StoreQueryProps) => import("@tanstack/react-query").UseQueryResult<Store, unknown>;
7
+ export {};
@@ -0,0 +1,7 @@
1
+ export { Form } from 'antd';
2
+ export * from './interfaces';
3
+ export * from './services';
4
+ export * from './components';
5
+ export * from './constants';
6
+ export * from './hooks';
7
+ import './global.scss';
@@ -0,0 +1,16 @@
1
+ export interface ApplicationsByCategory {
2
+ Id: string;
3
+ Name: string;
4
+ Applications: ApplicationAttribute[];
5
+ }
6
+ export interface ApplicationAttribute {
7
+ Id: string;
8
+ Key: string;
9
+ Name: string;
10
+ Description: string;
11
+ URL: string;
12
+ ImageURL: string;
13
+ Status: string;
14
+ CreateDate: number;
15
+ UpdateDate: number;
16
+ }
@@ -0,0 +1,6 @@
1
+ export interface Configuration {
2
+ ApiHost: string;
3
+ ApiPath: string;
4
+ token?: string;
5
+ tokenAuth0?: string;
6
+ }
@@ -0,0 +1,21 @@
1
+ export interface Customer {
2
+ Name: string;
3
+ CustomerId: string;
4
+ MemberNumber: string;
5
+ Email: string;
6
+ FirstName: string;
7
+ LastName: string;
8
+ Gender: string;
9
+ Birthday: string;
10
+ Jobtitle: string;
11
+ Address: CustomerAddress;
12
+ DoNotPhone: boolean;
13
+ DoNotEmail: boolean;
14
+ Mobilephone: string;
15
+ }
16
+ export interface CustomerAddress {
17
+ Address: string;
18
+ Zip: string;
19
+ City: string;
20
+ Country: string;
21
+ }
@@ -0,0 +1,33 @@
1
+ export interface Product {
2
+ Id: string;
3
+ Reference: string;
4
+ CompanyId: string;
5
+ Name: string;
6
+ PriceSRP: number;
7
+ PriceCost: number;
8
+ VATId: string;
9
+ HierarchyId: string;
10
+ SupplierId: string;
11
+ IsStockCountEnabled: boolean;
12
+ MinOnlineStockQuantity: number;
13
+ IsNewArrival: boolean;
14
+ IsVerified: boolean;
15
+ Status: string;
16
+ Type: number;
17
+ Attributes: ProductAttribute[];
18
+ Items: ProductItem[];
19
+ CreateDate: number;
20
+ UpdateDate: number;
21
+ Recommendations: string[];
22
+ SimilarProducts: string[];
23
+ Images: string[];
24
+ }
25
+ export interface ProductItem {
26
+ SKU: string;
27
+ Barcodes: string[];
28
+ Attributes: ProductAttribute[];
29
+ }
30
+ export interface ProductAttribute {
31
+ Name: string;
32
+ Value: string;
33
+ }
@@ -0,0 +1,5 @@
1
+ export declare type ResponseList<K extends string, T> = {
2
+ [key in K]: T[];
3
+ } & {
4
+ Count: number;
5
+ };
@@ -0,0 +1,7 @@
1
+ export interface Store {
2
+ Id: string;
3
+ Name: string;
4
+ Address: string;
5
+ City: string;
6
+ ZipCode: string;
7
+ }
@@ -0,0 +1,6 @@
1
+ export * from './ResponseList';
2
+ export * from './Configuration';
3
+ export * from './Store';
4
+ export * from './Product';
5
+ export * from './Customer';
6
+ export * from './ApplicationsByCategory';
@@ -0,0 +1,5 @@
1
+ import 'whatwg-fetch';
2
+ export declare const get: <T>(path: string, params?: Record<string, unknown>) => Promise<T>;
3
+ export declare const getAuth0: <T>(path: string, params?: Record<string, unknown>) => Promise<T>;
4
+ export declare const post: <T>(path: string, body?: unknown) => Promise<T>;
5
+ export declare const put: <T>(path: string, body?: unknown) => Promise<T>;
@@ -0,0 +1,3 @@
1
+ import { Configuration } from "../../interfaces/Configuration";
2
+ export declare const appConfig: Partial<Configuration>;
3
+ export declare const initService: (configuration: Configuration) => void;
@@ -0,0 +1,2 @@
1
+ export * from './InitService';
2
+ export * from './ApiService';
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@omniumretail/shared-resources",
3
+ "version": "0.0.1",
4
+ "private": false,
5
+ "description": "Shared Components and services or utils to the frontend versions",
6
+ "main": "dist/bundle.js",
7
+ "typings": "./dist/types/index",
8
+ "scripts": {
9
+ "prepublish": "rm -rf ./dist && npm run build",
10
+ "start": "webpack -w",
11
+ "build": "webpack",
12
+ "test": "echo \"Error: no test specified\" && exit 1"
13
+ },
14
+ "author": "",
15
+ "license": "ISC",
16
+ "devDependencies": {
17
+ "@types/react": "^18.0.21",
18
+ "@typescript-eslint/eslint-plugin": "^5.38.1",
19
+ "@typescript-eslint/parser": "^5.38.1",
20
+ "css-loader": "^6.7.1",
21
+ "eslint": "^8.24.0",
22
+ "eslint-plugin-css-modules": "^2.11.0",
23
+ "eslint-plugin-react-hooks": "^4.6.0",
24
+ "file-loader": "^6.2.0",
25
+ "sass": "^1.55.0",
26
+ "sass-loader": "^13.0.2",
27
+ "style-loader": "^3.3.1",
28
+ "stylelint": "^14.12.1",
29
+ "stylelint-config-css-modules": "^4.1.0",
30
+ "stylelint-config-standard-scss": "^5.0.0",
31
+ "stylelint-css-modules": "^1.2.2",
32
+ "ts-loader": "^9.4.1",
33
+ "typescript": "^4.8.3",
34
+ "url-loader": "^4.1.1",
35
+ "webpack": "^5.74.0",
36
+ "webpack-cli": "^4.10.0"
37
+ },
38
+ "dependencies": {
39
+ "@fortawesome/fontawesome-svg-core": "^6.2.0",
40
+ "@fortawesome/free-regular-svg-icons": "^6.2.0",
41
+ "@fortawesome/free-solid-svg-icons": "^6.2.0",
42
+ "@fortawesome/react-fontawesome": "^0.2.0",
43
+ "@tanstack/react-query": "4.8.0",
44
+ "@tanstack/react-query-devtools": "^4.8.0",
45
+ "antd": "^4.23.4",
46
+ "classnames": "^2.3.2",
47
+ "date-fns": "^2.29.3",
48
+ "react": "^18.2.0",
49
+ "react-dom": "^18.2.0",
50
+ "react-router-dom": "^6.4.1",
51
+ "use-query-params": "^2.1.1",
52
+ "whatwg-fetch": "^3.6.2"
53
+ }
54
+ }
@@ -0,0 +1,9 @@
1
+ <svg width="99" height="31" viewBox="0 0 99 31" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2
+ <rect x="0.375" y="0.711365" width="98.4375" height="29.9381" fill="url(#pattern0)"/>
3
+ <defs>
4
+ <pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
5
+ <use xlink:href="#image0_397_398" transform="translate(0 -0.0260847) scale(0.00333333 0.0109601)"/>
6
+ </pattern>
7
+ <image id="image0_397_398" width="300" height="96" xlink:href="data:image/png;base64,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"/>
8
+ </defs>
9
+ </svg>
@@ -0,0 +1,8 @@
1
+ import { Drawer, DrawerProps } from "antd";
2
+ import styles from './styles.module.scss';
3
+
4
+ export const BottomDrawer = (props: DrawerProps) => {
5
+ return (
6
+ <Drawer { ...props } className={ styles.drawerComponent } height="80%" placement="bottom" closeIcon={ "Fechar" }/>
7
+ );
8
+ };
@@ -0,0 +1,37 @@
1
+ .drawerComponent {
2
+
3
+ :global {
4
+
5
+ .ant-drawer-content-wrapper {
6
+ top: 10%;
7
+ }
8
+
9
+ .ant-drawer-content {
10
+ background: var(--app-footer-color);
11
+ border-radius: 7px 7px 0px 0px;
12
+ }
13
+
14
+ .ant-drawer-header {
15
+ border-bottom: 1px solid var(--disabled-input);
16
+ text-align: center;
17
+ padding: 16px 0px;
18
+ }
19
+
20
+ .ant-drawer-title {
21
+ font-weight: 700;
22
+ font-size: 14px;
23
+ color: var(--app-footer-bg-color);
24
+ }
25
+
26
+ .ant-drawer-close {
27
+ position: absolute;
28
+ top: 15px;
29
+ left: 335px;
30
+ font-weight: 400;
31
+ font-size: 12px;
32
+ color: var(--active-button-color);
33
+ }
34
+
35
+ }
36
+
37
+ }
@@ -0,0 +1,22 @@
1
+ import { Button as AntButton, ButtonProps } from 'antd';
2
+ import styles from './styles.module.scss';
3
+ import classNames from 'classnames';
4
+
5
+ export interface CustomButtonProps extends ButtonProps {
6
+ iconAlignRight?: boolean;
7
+ buttonStyle?: string;
8
+ }
9
+
10
+ export const Button = (props: CustomButtonProps) => {
11
+ const { iconAlignRight, buttonStyle } = props;
12
+
13
+ const buttonClasses = {
14
+ [styles.button]: true,
15
+ [styles["button--iconPositionStyle"]]: iconAlignRight===true,
16
+ [styles["button--style1"]]: buttonStyle==="style1",
17
+ }
18
+
19
+ return (
20
+ <AntButton { ...props } className={ classNames(buttonClasses) } />
21
+ );
22
+ };
@@ -0,0 +1,67 @@
1
+ .button {
2
+ padding: 12px 24px;
3
+ border-radius: 4px;
4
+ min-width: 100px;
5
+ display: flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ align-self: flex-start;
9
+ text-decoration: none;
10
+ border: none;
11
+ font-size: 14px;
12
+ line-height: 16.8px;
13
+ font-weight: 700;
14
+ font-family: 'Silka', sans-serif;
15
+ background-color: var(--button-default-background);
16
+ color: var(--button-default-text-color);
17
+
18
+ &:hover {
19
+ background-color: var(--button-default-background-hover-color);
20
+ //override ANTD default colors
21
+ color: var(--button-default-text-hover-color) !important;
22
+ }
23
+
24
+ &:focus,
25
+ &:active,
26
+ &:focus:active {
27
+ background-color: var(--button-default-background-focus-color);
28
+ color: var(--button-default-text-focus-color);
29
+ }
30
+
31
+ &:disabled,
32
+ &.disabled {
33
+ background-color: var(--button-disabled-background-color);
34
+ color: var(--button-disabled-default-text-color);
35
+ pointer-events: none;
36
+ }
37
+
38
+ &--iconPositionStyle {
39
+ flex-direction: row-reverse;
40
+ gap: 5px;
41
+ }
42
+
43
+ &--style1 {
44
+ background-color: var(--button-style-1-background);
45
+ color: var(--button-style-1-text-color);
46
+
47
+ &:hover {
48
+ background-color: var(--button-style-1-background-hover-color);
49
+ //override ANTD default colors
50
+ color: var(--button-style-1-text-hover-color) !important;
51
+ }
52
+
53
+ &:focus,
54
+ &:active,
55
+ &:focus:active {
56
+ background-color: var(--button-style-1-background-focus-color);
57
+ color: var(--button-style-1-text-focus-color);
58
+ }
59
+
60
+ &:disabled,
61
+ &.disabled {
62
+ background-color: var(--button-disabled-background-color);
63
+ color: var(--button-disabled-default-text-color);
64
+ pointer-events: none;
65
+ }
66
+ }
67
+ }
@@ -0,0 +1,44 @@
1
+ import { Row, Col } from 'antd';
2
+ import add from 'date-fns/add';
3
+ import format from 'date-fns/format';
4
+ import classNames from 'classnames';
5
+ import logo from '../../assets/omniu-retail_branco_s-fundo.png';
6
+ import { useState, useEffect } from 'react';
7
+
8
+ import styles from './styles.module.scss';
9
+
10
+ export const FooterComponent = ({ className }: { className?: string }) => {
11
+ const [date, setDate] = useState(new Date());
12
+
13
+ useEffect(() => {
14
+ const time = (function updateDate() {
15
+ const nextMinute = add(new Date(), { minutes: 1, seconds: 0 });
16
+ return setTimeout(() => {
17
+ setDate(new Date());
18
+ updateDate();
19
+ }, nextMinute.getTime() - new Date().getTime());
20
+ }());
21
+
22
+ return () => clearTimeout(time);
23
+ });
24
+
25
+ return (
26
+ <div className={ classNames(styles.footerComponent, className) }>
27
+ <Row>
28
+ <Col xs={ 12 } className={ styles.dateTime }>
29
+ <div className={ styles.date }>
30
+ {format(date, 'dd/MM/yyyy')}
31
+ </div>
32
+
33
+ <div className={ styles.time }>
34
+ {format(date, 'HH:mm')}
35
+ </div>
36
+ </Col>
37
+
38
+ <Col xs={ 12 } className={ styles.omniumLogo }>
39
+ <img src={ logo } className={ styles.omniumLogoImg } alt="omniu logo" />
40
+ </Col>
41
+ </Row>
42
+ </div>
43
+ );
44
+ }
@@ -0,0 +1,33 @@
1
+ .footerComponent {
2
+ height: 60px;
3
+ background-color: var(--app-footer-bg-color);
4
+ padding: 13px 24px;
5
+ box-sizing: border-box;
6
+
7
+ .date,
8
+ .time {
9
+ font-weight: 500;
10
+ font-size: 10px;
11
+ color: var(--app-footer-color);
12
+ display: inline-flex;
13
+ }
14
+
15
+ .dateTime {
16
+ line-height: 12px;
17
+ }
18
+
19
+ .time {
20
+ margin-left: 8px;
21
+ }
22
+
23
+ .omniumLogo {
24
+ line-height: 12px;
25
+ text-align: right;
26
+ }
27
+
28
+ .omniumLogoImg {
29
+ height: 23px;
30
+ margin-top: -5px;
31
+ margin-right: -6px;
32
+ }
33
+ }
@@ -0,0 +1,18 @@
1
+ import { Form, FormItemProps, Input, InputProps } from 'antd';
2
+
3
+ interface FormInputFieldProps extends Omit<FormItemProps, "name"> {
4
+ name: string;
5
+ inputProps?: InputProps;
6
+ }
7
+
8
+ export const InputField = (inputProps: InputProps) => (
9
+ <Input { ...inputProps } />
10
+ );
11
+
12
+ export const FormInputField = ({ inputProps, ...itemProps }: FormInputFieldProps) => {
13
+ return (
14
+ <Form.Item { ...itemProps }>
15
+ <InputField { ...inputProps } />
16
+ </Form.Item>
17
+ )
18
+ };