Improved Landing page
This commit is contained in:
@@ -24132,6 +24132,304 @@
|
|||||||
<folder_node>
|
<folder_node>
|
||||||
<name>landing</name>
|
<name>landing</name>
|
||||||
<children>
|
<children>
|
||||||
|
<folder_node>
|
||||||
|
<name>bigfeature</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>subtitle</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>title</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
|
<folder_node>
|
||||||
|
<name>footer</name>
|
||||||
|
<children>
|
||||||
|
<folder_node>
|
||||||
|
<name>company</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>about</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>contact</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>disclaimers</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>name</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>privacypolicy</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
|
<folder_node>
|
||||||
|
<name>io</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>help</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>name</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>status</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>slogan</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
|
<folder_node>
|
||||||
|
<name>hero</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>button</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>title</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
<folder_node>
|
<folder_node>
|
||||||
<name>labels</name>
|
<name>labels</name>
|
||||||
<children>
|
<children>
|
||||||
@@ -24200,6 +24498,241 @@
|
|||||||
</concept_node>
|
</concept_node>
|
||||||
</children>
|
</children>
|
||||||
</folder_node>
|
</folder_node>
|
||||||
|
<folder_node>
|
||||||
|
<name>pricing</name>
|
||||||
|
<children>
|
||||||
|
<folder_node>
|
||||||
|
<name>basic</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>name</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>sub</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
|
<folder_node>
|
||||||
|
<name>essentials</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>name</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>sub</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>pricingtitle</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<folder_node>
|
||||||
|
<name>pro</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>name</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>sub</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>title</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<folder_node>
|
||||||
|
<name>unlimited</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>name</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>sub</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
</children>
|
</children>
|
||||||
</folder_node>
|
</folder_node>
|
||||||
<folder_node>
|
<folder_node>
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import moment from "moment";
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import GlobalLoadingBar from "../components/global-loading-bar/global-loading-bar.component";
|
import GlobalLoadingBar from "../components/global-loading-bar/global-loading-bar.component";
|
||||||
import JiraSupportComponent from "../components/jira-support-widget/jira-support-widget.component";
|
|
||||||
import client from "../utils/GraphQLClient";
|
import client from "../utils/GraphQLClient";
|
||||||
import App from "./App";
|
import App from "./App";
|
||||||
moment.locale("en-US");
|
moment.locale("en-US");
|
||||||
@@ -16,21 +15,6 @@ if (process.env.NODE_ENV === "production") LogRocket.init("gvfvfw/bodyshopapp");
|
|||||||
export default function AppContainer() {
|
export default function AppContainer() {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
// useEffect(() => {
|
|
||||||
// // Include the Crisp code here, without the <script></script> tags
|
|
||||||
// window.$crisp = [];
|
|
||||||
// window.CRISP_WEBSITE_ID = "36724f62-2eb0-4b29-9cdd-9905fb99913e";
|
|
||||||
// var d = document;
|
|
||||||
// var s = d.createElement("script");
|
|
||||||
// s.src = "https://client.crisp.chat/l.js";
|
|
||||||
// s.async = 1;
|
|
||||||
// d.getElementsByTagName("head")[0].appendChild(s);
|
|
||||||
|
|
||||||
// return () => {
|
|
||||||
// d.getElementsByTagName("head")[0].removeChild(s);
|
|
||||||
// };
|
|
||||||
// }, []);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ApolloProvider client={client}>
|
<ApolloProvider client={client}>
|
||||||
<ConfigProvider
|
<ConfigProvider
|
||||||
@@ -46,7 +30,6 @@ export default function AppContainer() {
|
|||||||
>
|
>
|
||||||
<GlobalLoadingBar />
|
<GlobalLoadingBar />
|
||||||
<App />
|
<App />
|
||||||
<JiraSupportComponent />
|
|
||||||
</ConfigProvider>
|
</ConfigProvider>
|
||||||
</ApolloProvider>
|
</ApolloProvider>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import DocumentEditorContainer from "../components/document-editor/document-edit
|
|||||||
import ErrorBoundary from "../components/error-boundary/error-boundary.component";
|
import ErrorBoundary from "../components/error-boundary/error-boundary.component";
|
||||||
//Component Imports
|
//Component Imports
|
||||||
import LoadingSpinner from "../components/loading-spinner/loading-spinner.component";
|
import LoadingSpinner from "../components/loading-spinner/loading-spinner.component";
|
||||||
import AboutPage from "../pages/about/about.page";
|
import DisclaimerPage from "../pages/disclaimer/disclaimer.page";
|
||||||
import TechPageContainer from "../pages/tech/tech.page.container";
|
import TechPageContainer from "../pages/tech/tech.page.container";
|
||||||
import { setOnline } from "../redux/application/application.actions";
|
import { setOnline } from "../redux/application/application.actions";
|
||||||
import { selectOnline } from "../redux/application/application.selectors";
|
import { selectOnline } from "../redux/application/application.selectors";
|
||||||
@@ -17,7 +17,7 @@ import { selectCurrentUser } from "../redux/user/user.selectors";
|
|||||||
import PrivateRoute from "../utils/private-route";
|
import PrivateRoute from "../utils/private-route";
|
||||||
import "./App.styles.scss";
|
import "./App.styles.scss";
|
||||||
|
|
||||||
const LandingPage = lazy(() => import("../pages/landing/landing.page"));
|
import LandingPage from "../pages/landing/landing.page";
|
||||||
const ResetPassword = lazy(() =>
|
const ResetPassword = lazy(() =>
|
||||||
import("../pages/reset-password/reset-password.component")
|
import("../pages/reset-password/reset-password.component")
|
||||||
);
|
);
|
||||||
@@ -100,7 +100,7 @@ export function App({ checkUserSession, currentUser, online, setOnline }) {
|
|||||||
<Route exact path="/csi/:surveyId" component={CsiPage} />
|
<Route exact path="/csi/:surveyId" component={CsiPage} />
|
||||||
</ErrorBoundary>
|
</ErrorBoundary>
|
||||||
<ErrorBoundary>
|
<ErrorBoundary>
|
||||||
<Route exact path="/about" component={AboutPage} />
|
<Route exact path="/disclaimer" component={DisclaimerPage} />
|
||||||
</ErrorBoundary>
|
</ErrorBoundary>
|
||||||
<ErrorBoundary>
|
<ErrorBoundary>
|
||||||
<Route
|
<Route
|
||||||
|
|||||||
BIN
client/src/assets/banner-logo.png
Normal file
BIN
client/src/assets/banner-logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
BIN
client/src/assets/banner1.jpeg
Normal file
BIN
client/src/assets/banner1.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 272 KiB |
BIN
client/src/assets/banner2.jpeg
Normal file
BIN
client/src/assets/banner2.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 237 KiB |
BIN
client/src/assets/banner3.jpeg
Normal file
BIN
client/src/assets/banner3.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 177 KiB |
5
client/src/assets/icons/technology.svg
Normal file
5
client/src/assets/icons/technology.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" ?><svg style="enable-background:new 0 0 128 128;" version="1.1" viewBox="0 0 128 128" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><style type="text/css">
|
||||||
|
.st0{fill:none;stroke:#000000;stroke-width:8;stroke-miterlimit:10;}
|
||||||
|
.st1{display:none;}
|
||||||
|
.st2{display:inline;opacity:0.25;fill:#F45EFD;}
|
||||||
|
</style><g id="_x31_2_3D_Printing"/><g id="_x31_1_VR_Gear"/><g id="_x31_0_Virtual_reality"/><g id="_x39__Augmented_reality"/><g id="_x38__Teleport"/><g id="_x37__Glassess"/><g id="_x36__Folding_phone"/><g id="_x35__Drone"/><g id="_x34__Retina_scan"/><g id="_x33__Smartwatch"/><g id="_x32__Bionic_Arm"/><g id="_x31__Chip"><g><path d="M108,40c-5.2,0-9.6,3.3-11.3,8H84V32h-8V20h-8v12h-8V20h-8v12h-8v16H24v-8.7c4.7-1.7,8-6.1,8-11.3c0-6.6-5.4-12-12-12 S8,21.4,8,28c0,5.2,3.3,9.6,8,11.3V56h28v8H16v16.7c-4.7,1.7-8,6.1-8,11.3c0,6.6,5.4,12,12,12s12-5.4,12-12c0-5.2-3.3-9.6-8-11.3 V72h20v16h8v12h8V88h8v12h8V88h8V72h8v16.7c-4.7,1.7-8,6.1-8,11.3c0,6.6,5.4,12,12,12s12-5.4,12-12c0-5.2-3.3-9.6-8-11.3V64H84v-8 h12.7c1.7,4.7,6.1,8,11.3,8c6.6,0,12-5.4,12-12S114.6,40,108,40z M20,32c-2.2,0-4-1.8-4-4s1.8-4,4-4s4,1.8,4,4S22.2,32,20,32z M20,96c-2.2,0-4-1.8-4-4s1.8-4,4-4s4,1.8,4,4S22.2,96,20,96z M76,80H52V40h24V80z M96,96c2.2,0,4,1.8,4,4s-1.8,4-4,4s-4-1.8-4-4 S93.8,96,96,96z M108,56c-2.2,0-4-1.8-4-4s1.8-4,4-4s4,1.8,4,4S110.2,56,108,56z"/><rect height="8" width="8" x="56" y="64"/></g></g><g class="st1" id="Guide"><path class="st2" d="M120,8v112H8V8H120 M128,0H0v128h128V0L128,0z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -1,28 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
|
|
||||||
export default function JiraSupportComponent() {
|
|
||||||
//useScript();
|
|
||||||
|
|
||||||
return <div></div>;
|
|
||||||
}
|
|
||||||
|
|
||||||
// const useScript = () => {
|
|
||||||
// useEffect(() => {
|
|
||||||
// const script = document.createElement("script");
|
|
||||||
// script.src = "https://jsd-widget.atlassian.com/assets/embed.js";
|
|
||||||
// script.setAttribute("data-jsd-embedded", true);
|
|
||||||
// script.setAttribute("data-key", "d69bb65c-1dd3-483f-b109-66a970d03f44");
|
|
||||||
// script.setAttribute("data-base-url", "https://jsd-widget.atlassian.com");
|
|
||||||
// //script.async = true;
|
|
||||||
// script.onload = () => {
|
|
||||||
// var DOMContentLoaded_event = document.createEvent("Event");
|
|
||||||
// DOMContentLoaded_event.initEvent("DOMContentLoaded", true, true);
|
|
||||||
// window.document.dispatchEvent(DOMContentLoaded_event);
|
|
||||||
// };
|
|
||||||
// document.head.appendChild(script);
|
|
||||||
|
|
||||||
// return () => {
|
|
||||||
// document.head.removeChild(script);
|
|
||||||
// };
|
|
||||||
// }, []);
|
|
||||||
// };
|
|
||||||
@@ -1,10 +1,7 @@
|
|||||||
import { AlertOutlined } from "@ant-design/icons";
|
|
||||||
import * as Sentry from "@sentry/react";
|
import * as Sentry from "@sentry/react";
|
||||||
import { Button, notification, Space } from "antd";
|
|
||||||
//import "antd/dist/antd.css";
|
//import "antd/dist/antd.css";
|
||||||
import "antd/dist/antd.less";
|
import "antd/dist/antd.less";
|
||||||
import Dinero from "dinero.js";
|
import Dinero from "dinero.js";
|
||||||
import i18n from "i18next";
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import ReactDOM from "react-dom";
|
import ReactDOM from "react-dom";
|
||||||
import { Provider } from "react-redux";
|
import { Provider } from "react-redux";
|
||||||
@@ -15,7 +12,6 @@ import LoadingSpinner from "./components/loading-spinner/loading-spinner.compone
|
|||||||
import "./index.css";
|
import "./index.css";
|
||||||
import { persistor, store } from "./redux/store";
|
import { persistor, store } from "./redux/store";
|
||||||
import reportWebVitals from "./reportWebVitals";
|
import reportWebVitals from "./reportWebVitals";
|
||||||
import * as serviceWorkerRegistration from "./serviceWorkerRegistration";
|
|
||||||
import "./translations/i18n";
|
import "./translations/i18n";
|
||||||
import "./utils/CleanAxios";
|
import "./utils/CleanAxios";
|
||||||
require("dotenv").config();
|
require("dotenv").config();
|
||||||
@@ -52,44 +48,44 @@ ReactDOM.render(
|
|||||||
document.getElementById("root")
|
document.getElementById("root")
|
||||||
);
|
);
|
||||||
|
|
||||||
const onServiceWorkerUpdate = (registration) => {
|
// const onServiceWorkerUpdate = (registration) => {
|
||||||
console.log("onServiceWorkerUpdate", registration);
|
// console.log("onServiceWorkerUpdate", registration);
|
||||||
|
|
||||||
const btn = (
|
// const btn = (
|
||||||
<Space flex>
|
// <Space flex>
|
||||||
<Button
|
// <Button
|
||||||
onClick={async () => {
|
// onClick={async () => {
|
||||||
window.open("https://imex-online.noticeable.news/", "_blank");
|
// window.open("https://imex-online.noticeable.news/", "_blank");
|
||||||
}}
|
// }}
|
||||||
>
|
// >
|
||||||
{i18n.t("general.actions.viewreleasenotes")}
|
// {i18n.t("general.actions.viewreleasenotes")}
|
||||||
</Button>
|
// </Button>
|
||||||
<Button
|
// <Button
|
||||||
type="primary"
|
// type="primary"
|
||||||
onClick={async () => {
|
// onClick={async () => {
|
||||||
if (registration && registration.waiting) {
|
// if (registration && registration.waiting) {
|
||||||
await registration.unregister();
|
// await registration.unregister();
|
||||||
// Makes Workbox call skipWaiting()
|
// // Makes Workbox call skipWaiting()
|
||||||
registration.waiting.postMessage({ type: "SKIP_WAITING" });
|
// registration.waiting.postMessage({ type: "SKIP_WAITING" });
|
||||||
// Once the service worker is unregistered, we can reload the page to let
|
// // Once the service worker is unregistered, we can reload the page to let
|
||||||
// the browser download a fresh copy of our app (invalidating the cache)
|
// // the browser download a fresh copy of our app (invalidating the cache)
|
||||||
window.location.reload();
|
// window.location.reload();
|
||||||
}
|
// }
|
||||||
}}
|
// }}
|
||||||
>
|
// >
|
||||||
{i18n.t("general.actions.refresh")}
|
// {i18n.t("general.actions.refresh")}
|
||||||
</Button>
|
// </Button>
|
||||||
</Space>
|
// </Space>
|
||||||
);
|
// );
|
||||||
notification.open({
|
// notification.open({
|
||||||
icon: <AlertOutlined />,
|
// icon: <AlertOutlined />,
|
||||||
message: i18n.t("general.messages.newversiontitle"),
|
// message: i18n.t("general.messages.newversiontitle"),
|
||||||
description: i18n.t("general.messages.newversionmessage"),
|
// description: i18n.t("general.messages.newversionmessage"),
|
||||||
duration: 0,
|
// duration: 0,
|
||||||
btn,
|
// btn,
|
||||||
key: "updateavailable",
|
// key: "updateavailable",
|
||||||
});
|
// });
|
||||||
};
|
// };
|
||||||
|
|
||||||
serviceWorkerRegistration.register({ onUpdate: onServiceWorkerUpdate });
|
// serviceWorkerRegistration.register({ onUpdate: onServiceWorkerUpdate });
|
||||||
reportWebVitals();
|
reportWebVitals();
|
||||||
|
|||||||
135
client/src/landing/Nav0.jsx
Normal file
135
client/src/landing/Nav0.jsx
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import TweenOne from 'rc-tween-one';
|
||||||
|
import { Menu } from 'antd';
|
||||||
|
import { getChildrenToRender } from './utils';
|
||||||
|
|
||||||
|
const { Item, SubMenu } = Menu;
|
||||||
|
|
||||||
|
class Header extends React.Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
this.state = {
|
||||||
|
phoneOpen: undefined,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
phoneClick = () => {
|
||||||
|
const phoneOpen = !this.state.phoneOpen;
|
||||||
|
this.setState({
|
||||||
|
phoneOpen,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const { dataSource, isMobile, ...props } = this.props;
|
||||||
|
const { phoneOpen } = this.state;
|
||||||
|
const navData = dataSource.Menu.children;
|
||||||
|
const navChildren = navData.map((item) => {
|
||||||
|
const { children: a, subItem, ...itemProps } = item;
|
||||||
|
if (subItem) {
|
||||||
|
return (
|
||||||
|
<SubMenu
|
||||||
|
key={item.name}
|
||||||
|
{...itemProps}
|
||||||
|
title={
|
||||||
|
<div
|
||||||
|
{...a}
|
||||||
|
className={`header0-item-block ${a.className}`.trim()}
|
||||||
|
>
|
||||||
|
{a.children.map(getChildrenToRender)}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
popupClassName="header0-item-child"
|
||||||
|
>
|
||||||
|
{subItem.map(($item, ii) => {
|
||||||
|
const { children: childItem } = $item;
|
||||||
|
const child = childItem.href ? (
|
||||||
|
<a {...childItem}>
|
||||||
|
{childItem.children.map(getChildrenToRender)}
|
||||||
|
</a>
|
||||||
|
) : (
|
||||||
|
<div {...childItem}>
|
||||||
|
{childItem.children.map(getChildrenToRender)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
return (
|
||||||
|
<Item key={$item.name || ii.toString()} {...$item}>
|
||||||
|
{child}
|
||||||
|
</Item>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</SubMenu>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<Item key={item.name} {...itemProps}>
|
||||||
|
<a {...a} className={`header0-item-block ${a.className}`.trim()}>
|
||||||
|
{a.children.map(getChildrenToRender)}
|
||||||
|
</a>
|
||||||
|
</Item>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
const moment = phoneOpen === undefined ? 300 : null;
|
||||||
|
return (
|
||||||
|
<TweenOne
|
||||||
|
component="header"
|
||||||
|
animation={{ opacity: 0, type: 'from' }}
|
||||||
|
{...dataSource.wrapper}
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
{...dataSource.page}
|
||||||
|
className={`${dataSource.page.className}${phoneOpen ? ' open' : ''}`}
|
||||||
|
>
|
||||||
|
<TweenOne
|
||||||
|
animation={{ x: -30, type: 'from', ease: 'easeOutQuad' }}
|
||||||
|
{...dataSource.logo}
|
||||||
|
>
|
||||||
|
<img width="100%" src={dataSource.logo.children} alt="img" />
|
||||||
|
</TweenOne>
|
||||||
|
{isMobile && (
|
||||||
|
<div
|
||||||
|
{...dataSource.mobileMenu}
|
||||||
|
onClick={() => {
|
||||||
|
this.phoneClick();
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<em />
|
||||||
|
<em />
|
||||||
|
<em />
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
<TweenOne
|
||||||
|
{...dataSource.Menu}
|
||||||
|
animation={
|
||||||
|
isMobile
|
||||||
|
? {
|
||||||
|
height: 0,
|
||||||
|
duration: 300,
|
||||||
|
onComplete: (e) => {
|
||||||
|
if (this.state.phoneOpen) {
|
||||||
|
e.target.style.height = 'auto';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ease: 'easeInOutQuad',
|
||||||
|
}
|
||||||
|
: null
|
||||||
|
}
|
||||||
|
moment={moment}
|
||||||
|
reverse={!!phoneOpen}
|
||||||
|
>
|
||||||
|
<Menu
|
||||||
|
mode={isMobile ? 'inline' : 'horizontal'}
|
||||||
|
defaultSelectedKeys={['sub0']}
|
||||||
|
theme="dark"
|
||||||
|
>
|
||||||
|
{navChildren}
|
||||||
|
</Menu>
|
||||||
|
</TweenOne>
|
||||||
|
</div>
|
||||||
|
</TweenOne>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Header;
|
||||||
@@ -1,80 +1,87 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
|
import i18n from "../translations/i18n";
|
||||||
|
import ImexOnlineLogoLight from "../assets/ImEX Online Logo.png";
|
||||||
|
import ImexOnlineLogoDark from "../assets/ImEX Online Logo - Dark.png";
|
||||||
|
import ImexOnlineBannerLogo from "../assets/banner-logo.png";
|
||||||
|
import TechnologySvg from "../assets/icons/technology.svg";
|
||||||
export const Nav00DataSource = {
|
export const Nav00DataSource = {
|
||||||
wrapper: { className: "header0 home-page-wrapper" },
|
wrapper: { className: "header0 home-page-wrapper" },
|
||||||
page: { className: "home-page" },
|
page: { className: "home-page" },
|
||||||
logo: {
|
logo: {
|
||||||
className: "header0-logo",
|
className: "header0-logo",
|
||||||
children: "https://os.alipayobjects.com/rmsportal/mlcYmsRilwraoAe.svg",
|
children: ImexOnlineLogoLight,
|
||||||
},
|
},
|
||||||
Menu: {
|
Menu: {
|
||||||
className: "header0-menu",
|
className: "header0-menu",
|
||||||
children: [
|
children: [
|
||||||
{
|
// {
|
||||||
name: "item0",
|
// name: "item0",
|
||||||
className: "header0-item",
|
// className: "header0-item",
|
||||||
children: {
|
// children: {
|
||||||
href: "#",
|
// href: "#",
|
||||||
children: [{ children: "导航一", name: "text" }],
|
// children: [{ children: "导航一", name: "text" }],
|
||||||
},
|
// },
|
||||||
subItem: [
|
// subItem: [
|
||||||
{
|
// {
|
||||||
name: "sub0",
|
// name: "sub0",
|
||||||
className: "item-sub",
|
// className: "item-sub",
|
||||||
children: {
|
// children: {
|
||||||
className: "item-sub-item",
|
// className: "item-sub-item",
|
||||||
children: [
|
// children: [
|
||||||
{
|
// {
|
||||||
name: "image0",
|
// name: "image0",
|
||||||
className: "item-image",
|
// className: "item-image",
|
||||||
children:
|
// children:
|
||||||
"https://gw.alipayobjects.com/zos/rmsportal/ruHbkzzMKShUpDYMEmHM.svg",
|
// "https://gw.alipayobjects.com/zos/rmsportal/ruHbkzzMKShUpDYMEmHM.svg",
|
||||||
},
|
// },
|
||||||
{
|
// {
|
||||||
name: "title",
|
// name: "title",
|
||||||
className: "item-title",
|
// className: "item-title",
|
||||||
children: "Ant Design",
|
// children: "Ant Design",
|
||||||
},
|
// },
|
||||||
{
|
// {
|
||||||
name: "content",
|
// name: "content",
|
||||||
className: "item-content",
|
// className: "item-content",
|
||||||
children: "企业级 UI 设计体系",
|
// children: "企业级 UI 设计体系",
|
||||||
},
|
// },
|
||||||
],
|
// ],
|
||||||
},
|
// },
|
||||||
},
|
// },
|
||||||
{
|
// {
|
||||||
name: "sub1",
|
// name: "sub1",
|
||||||
className: "item-sub",
|
// className: "item-sub",
|
||||||
children: {
|
// children: {
|
||||||
className: "item-sub-item",
|
// className: "item-sub-item",
|
||||||
children: [
|
// children: [
|
||||||
{
|
// {
|
||||||
name: "image0",
|
// name: "image0",
|
||||||
className: "item-image",
|
// className: "item-image",
|
||||||
children:
|
// children:
|
||||||
"https://gw.alipayobjects.com/zos/rmsportal/ruHbkzzMKShUpDYMEmHM.svg",
|
// "https://gw.alipayobjects.com/zos/rmsportal/ruHbkzzMKShUpDYMEmHM.svg",
|
||||||
},
|
// },
|
||||||
{
|
// {
|
||||||
name: "title",
|
// name: "title",
|
||||||
className: "item-title",
|
// className: "item-title",
|
||||||
children: "Ant Design",
|
// children: "Ant Design",
|
||||||
},
|
// },
|
||||||
{
|
// {
|
||||||
name: "content",
|
// name: "content",
|
||||||
className: "item-content",
|
// className: "item-content",
|
||||||
children: "企业级 UI 设计体系",
|
// children: "企业级 UI 设计体系",
|
||||||
},
|
// },
|
||||||
],
|
// ],
|
||||||
},
|
// },
|
||||||
},
|
// },
|
||||||
],
|
// ],
|
||||||
},
|
// },
|
||||||
{
|
{
|
||||||
name: "item1",
|
name: "item1",
|
||||||
className: "header0-item",
|
className: "header0-item",
|
||||||
children: {
|
children: {
|
||||||
href: "#",
|
href: "#",
|
||||||
children: [{ children: "导航二", name: "text" }],
|
children: [
|
||||||
|
{ children: i18n.t("landing.labels.features"), name: "text" },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -82,34 +89,42 @@ export const Nav00DataSource = {
|
|||||||
className: "header0-item",
|
className: "header0-item",
|
||||||
children: {
|
children: {
|
||||||
href: "#",
|
href: "#",
|
||||||
children: [{ children: "导航三", name: "text" }],
|
children: [
|
||||||
|
{ children: i18n.t("landing.labels.pricing"), name: "text" },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "item3",
|
name: "item3",
|
||||||
className: "header0-item",
|
className: "header0-item",
|
||||||
children: {
|
children: {
|
||||||
href: "#",
|
href: "/manage",
|
||||||
children: [{ children: "导航四", name: "text" }],
|
children: [
|
||||||
|
{ children: i18n.t("landing.labels.managemyshop"), name: "text" },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
mobileMenu: { className: "header0-mobile-menu" },
|
mobileMenu: { className: "header0-mobile-menu" },
|
||||||
};
|
};
|
||||||
|
|
||||||
export const Banner00DataSource = {
|
export const Banner00DataSource = {
|
||||||
wrapper: { className: "banner0" },
|
wrapper: { className: "banner0" },
|
||||||
textWrapper: { className: "banner0-text-wrapper" },
|
textWrapper: { className: "banner0-text-wrapper" },
|
||||||
title: {
|
title: {
|
||||||
className: "banner0-title",
|
className: "banner0-title",
|
||||||
children: "https://zos.alipayobjects.com/rmsportal/HqnZZjBjWRbjyMr.png",
|
children: (
|
||||||
|
<img alt="" style={{ width: "100%" }} src={ImexOnlineBannerLogo} />
|
||||||
|
),
|
||||||
},
|
},
|
||||||
content: {
|
content: {
|
||||||
className: "banner0-content",
|
className: "banner0-content",
|
||||||
children: "一个高效的页面动画解决方案",
|
children: i18n.t("landing.hero.title"),
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
className: "banner0-button",
|
||||||
|
children: i18n.t("landing.hero.button"),
|
||||||
},
|
},
|
||||||
button: { className: "banner0-button", children: "Learn More" },
|
|
||||||
};
|
};
|
||||||
export const Content40DataSource = {
|
export const Content40DataSource = {
|
||||||
wrapper: { className: "home-page-wrapper content4-wrapper" },
|
wrapper: { className: "home-page-wrapper content4-wrapper" },
|
||||||
@@ -144,7 +159,7 @@ export const Content00DataSource = {
|
|||||||
OverPack: { playScale: 0.3, className: "" },
|
OverPack: { playScale: 0.3, className: "" },
|
||||||
titleWrapper: {
|
titleWrapper: {
|
||||||
className: "title-wrapper",
|
className: "title-wrapper",
|
||||||
children: [{ name: "title", children: "产品与服务" }],
|
children: [{ name: "title", children: "Feature Highlights" }],
|
||||||
},
|
},
|
||||||
childWrapper: {
|
childWrapper: {
|
||||||
className: "content0-block-wrapper",
|
className: "content0-block-wrapper",
|
||||||
@@ -166,9 +181,9 @@ export const Content00DataSource = {
|
|||||||
{
|
{
|
||||||
name: "title",
|
name: "title",
|
||||||
className: "content0-block-title",
|
className: "content0-block-title",
|
||||||
children: "一站式业务接入",
|
children: "Feature Highlight 1",
|
||||||
},
|
},
|
||||||
{ name: "content", children: "支付、结算、核算接入产品效率翻四倍" },
|
{ name: "content", children: "Feature description for this item." },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -189,11 +204,11 @@ export const Content00DataSource = {
|
|||||||
{
|
{
|
||||||
name: "title",
|
name: "title",
|
||||||
className: "content0-block-title",
|
className: "content0-block-title",
|
||||||
children: "一站式事中风险监控",
|
children: "Feature Highlight 2",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "content",
|
name: "content",
|
||||||
children: "在所有需求配置环节事前风险控制和质量控制能力",
|
children: "Feature description for #2",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -215,11 +230,11 @@ export const Content00DataSource = {
|
|||||||
{
|
{
|
||||||
name: "title",
|
name: "title",
|
||||||
className: "content0-block-title",
|
className: "content0-block-title",
|
||||||
children: "一站式数据运营",
|
children: "Feature Highlight 3",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "content",
|
name: "content",
|
||||||
children: "沉淀产品接入效率和运营小二工作效率数据",
|
children: "Feature description for 3.",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -232,14 +247,16 @@ export const Content10DataSource = {
|
|||||||
OverPack: { className: "home-page content1", playScale: 0.3 },
|
OverPack: { className: "home-page content1", playScale: 0.3 },
|
||||||
imgWrapper: { className: "content1-img", md: 10, xs: 24 },
|
imgWrapper: { className: "content1-img", md: 10, xs: 24 },
|
||||||
img: {
|
img: {
|
||||||
children: "https://zos.alipayobjects.com/rmsportal/nLzbeGQLPyBJoli.png",
|
children: TechnologySvg,
|
||||||
},
|
},
|
||||||
textWrapper: { className: "content1-text", md: 14, xs: 24 },
|
textWrapper: { className: "content1-text", md: 14, xs: 24 },
|
||||||
title: { className: "content1-title", children: "企业资源管理" },
|
title: {
|
||||||
|
className: "content1-title",
|
||||||
|
children: i18n.t("landing.bigfeature.title"),
|
||||||
|
},
|
||||||
content: {
|
content: {
|
||||||
className: "content1-content",
|
className: "content1-content",
|
||||||
children:
|
children: i18n.t("landing.bigfeature.subtitle"),
|
||||||
"云资源集中编排、弹性伸缩、持续发布和部署,高可用及容灾。云资源集中编排、弹性伸缩、持续发布和部署,高可用及容灾。云资源集中编排、弹性伸缩、持续发布和部署,高可用及容灾。",
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
export const Pricing20DataSource = {
|
export const Pricing20DataSource = {
|
||||||
@@ -249,7 +266,11 @@ export const Pricing20DataSource = {
|
|||||||
titleWrapper: {
|
titleWrapper: {
|
||||||
className: "pricing2-title-wrapper",
|
className: "pricing2-title-wrapper",
|
||||||
children: [
|
children: [
|
||||||
{ name: "title", children: "价目表", className: "pricing2-title-h1" },
|
{
|
||||||
|
name: "title",
|
||||||
|
children: i18n.t("landing.pricing.pricingtitle"),
|
||||||
|
className: "pricing2-title-h1",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
Table: {
|
Table: {
|
||||||
@@ -270,23 +291,23 @@ export const Pricing20DataSource = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
dataIndex: "free",
|
dataIndex: "essentials",
|
||||||
key: "free",
|
key: "essentials",
|
||||||
name: "free",
|
name: "essentials",
|
||||||
childWrapper: {
|
childWrapper: {
|
||||||
className: "pricing2-table-name-block",
|
className: "pricing2-table-name-block",
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
name: "name",
|
name: "name",
|
||||||
className: "pricing2-table-name",
|
className: "pricing2-table-name",
|
||||||
children: "Free",
|
children: i18n.t("landing.pricing.essentials.name"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "content",
|
name: "content",
|
||||||
className: "pricing2-table-money",
|
className: "pricing2-table-money",
|
||||||
children: "¥0",
|
children: i18n.t("landing.pricing.essentials.sub"),
|
||||||
},
|
},
|
||||||
{ name: "button", children: { href: "#", children: "免费试用" } },
|
// { name: "button", children: { href: "#", children: "免费试用" } },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -300,14 +321,14 @@ export const Pricing20DataSource = {
|
|||||||
{
|
{
|
||||||
name: "name",
|
name: "name",
|
||||||
className: "pricing2-table-name",
|
className: "pricing2-table-name",
|
||||||
children: "Basic",
|
children: i18n.t("landing.pricing.basic.name"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "content",
|
name: "content",
|
||||||
className: "pricing2-table-money",
|
className: "pricing2-table-money",
|
||||||
children: "¥550",
|
children: i18n.t("landing.pricing.basic.sub"),
|
||||||
},
|
},
|
||||||
{ name: "button", children: { href: "#", children: "立即购买" } },
|
//{ name: "button", children: { href: "#", children: "立即购买" } },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -321,17 +342,17 @@ export const Pricing20DataSource = {
|
|||||||
{
|
{
|
||||||
name: "name",
|
name: "name",
|
||||||
className: "pricing2-table-name",
|
className: "pricing2-table-name",
|
||||||
children: "Pro",
|
children: i18n.t("landing.pricing.pro.name"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "content",
|
name: "content",
|
||||||
className: "pricing2-table-money",
|
className: "pricing2-table-money",
|
||||||
children: "¥2,200",
|
children: i18n.t("landing.pricing.pro.sub"),
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "button",
|
|
||||||
children: { href: "#", type: "primary", children: "立即购买" },
|
|
||||||
},
|
},
|
||||||
|
// {
|
||||||
|
// name: "button",
|
||||||
|
// children: { href: "#", type: "primary", children: "立即购买" },
|
||||||
|
// },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -345,14 +366,14 @@ export const Pricing20DataSource = {
|
|||||||
{
|
{
|
||||||
name: "name",
|
name: "name",
|
||||||
className: "pricing2-table-name",
|
className: "pricing2-table-name",
|
||||||
children: "Unlimited",
|
children: i18n.t("landing.pricing.unlimited.name"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "content",
|
name: "content",
|
||||||
className: "pricing2-table-money",
|
className: "pricing2-table-money",
|
||||||
children: "¥5,600",
|
children: i18n.t("landing.pricing.unlimited.sub"),
|
||||||
},
|
},
|
||||||
{ name: "button", children: { href: "#", children: "立即购买" } },
|
// { name: "button", children: { href: "#", children: "立即购买" } },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -366,25 +387,29 @@ export const Pricing20DataSource = {
|
|||||||
{
|
{
|
||||||
className: "pricing2-table-content-name",
|
className: "pricing2-table-content-name",
|
||||||
name: "name",
|
name: "name",
|
||||||
children: "实例系列1",
|
children: "Unlimited Vehicles, Customers, and Work Orders",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
children: "Limited",
|
children:
|
||||||
|
"https://gw.alipayobjects.com/zos/basement_prod/14ce3060-34e6-4b30-9a45-1a6b95542310.svg",
|
||||||
name: "content0",
|
name: "content0",
|
||||||
className: "pricing2-table-content",
|
className: "pricing2-table-content",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
children: "Unlimited",
|
children:
|
||||||
|
"https://gw.alipayobjects.com/zos/basement_prod/14ce3060-34e6-4b30-9a45-1a6b95542310.svg",
|
||||||
name: "content1",
|
name: "content1",
|
||||||
className: "pricing2-table-content",
|
className: "pricing2-table-content",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
children: "Unlimited",
|
children:
|
||||||
|
"https://gw.alipayobjects.com/zos/basement_prod/14ce3060-34e6-4b30-9a45-1a6b95542310.svg",
|
||||||
name: "content2",
|
name: "content2",
|
||||||
className: "pricing2-table-content",
|
className: "pricing2-table-content",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
children: "Unlimited",
|
children:
|
||||||
|
"https://gw.alipayobjects.com/zos/basement_prod/14ce3060-34e6-4b30-9a45-1a6b95542310.svg",
|
||||||
name: "content3",
|
name: "content3",
|
||||||
className: "pricing2-table-content",
|
className: "pricing2-table-content",
|
||||||
},
|
},
|
||||||
@@ -396,25 +421,30 @@ export const Pricing20DataSource = {
|
|||||||
{
|
{
|
||||||
className: "pricing2-table-content-name",
|
className: "pricing2-table-content-name",
|
||||||
name: "name",
|
name: "name",
|
||||||
children: "实例系列2",
|
children:
|
||||||
|
"Access your system from anywhere (Desktop, Mobile, and Native Mobile Apps)",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
children: "Limited",
|
children:
|
||||||
|
"https://gw.alipayobjects.com/zos/basement_prod/14ce3060-34e6-4b30-9a45-1a6b95542310.svg",
|
||||||
name: "content0",
|
name: "content0",
|
||||||
className: "pricing2-table-content",
|
className: "pricing2-table-content",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
children: "Unlimited",
|
children:
|
||||||
|
"https://gw.alipayobjects.com/zos/basement_prod/14ce3060-34e6-4b30-9a45-1a6b95542310.svg",
|
||||||
name: "content1",
|
name: "content1",
|
||||||
className: "pricing2-table-content",
|
className: "pricing2-table-content",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
children: "Unlimited",
|
children:
|
||||||
|
"https://gw.alipayobjects.com/zos/basement_prod/14ce3060-34e6-4b30-9a45-1a6b95542310.svg",
|
||||||
name: "content2",
|
name: "content2",
|
||||||
className: "pricing2-table-content",
|
className: "pricing2-table-content",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
children: "Unlimited",
|
children:
|
||||||
|
"https://gw.alipayobjects.com/zos/basement_prod/14ce3060-34e6-4b30-9a45-1a6b95542310.svg",
|
||||||
name: "content3",
|
name: "content3",
|
||||||
className: "pricing2-table-content",
|
className: "pricing2-table-content",
|
||||||
},
|
},
|
||||||
@@ -426,7 +456,7 @@ export const Pricing20DataSource = {
|
|||||||
{
|
{
|
||||||
className: "pricing2-table-content-name",
|
className: "pricing2-table-content-name",
|
||||||
name: "name",
|
name: "name",
|
||||||
children: "固定宽带计费",
|
children: "Included Media Storage",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "content0",
|
name: "content0",
|
||||||
@@ -435,17 +465,17 @@ export const Pricing20DataSource = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "content1",
|
name: "content1",
|
||||||
children: "250GB",
|
children: "100GB",
|
||||||
className: "pricing2-table-content",
|
className: "pricing2-table-content",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "content2",
|
name: "content2",
|
||||||
children: "600GB",
|
children: "175GB",
|
||||||
className: "pricing2-table-content",
|
className: "pricing2-table-content",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "content3",
|
name: "content3",
|
||||||
children: "Unlimited",
|
children: "250GB",
|
||||||
className: "pricing2-table-content",
|
className: "pricing2-table-content",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -456,7 +486,7 @@ export const Pricing20DataSource = {
|
|||||||
{
|
{
|
||||||
className: "pricing2-table-content-name",
|
className: "pricing2-table-content-name",
|
||||||
name: "name",
|
name: "name",
|
||||||
children: "闲置负载均衡",
|
children: "Mobile Image Sync",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
children: "-",
|
children: "-",
|
||||||
@@ -465,8 +495,7 @@ export const Pricing20DataSource = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "content1",
|
name: "content1",
|
||||||
children:
|
children: "-",
|
||||||
"https://gw.alipayobjects.com/zos/basement_prod/14ce3060-34e6-4b30-9a45-1a6b95542310.svg",
|
|
||||||
className: "pricing2-table-content",
|
className: "pricing2-table-content",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -489,7 +518,7 @@ export const Pricing20DataSource = {
|
|||||||
{
|
{
|
||||||
className: "pricing2-table-content-name",
|
className: "pricing2-table-content-name",
|
||||||
name: "name",
|
name: "name",
|
||||||
children: "4核",
|
children: "Integrated Text Messaging",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "content0",
|
name: "content0",
|
||||||
@@ -521,7 +550,7 @@ export const Pricing20DataSource = {
|
|||||||
{
|
{
|
||||||
className: "pricing2-table-content-name",
|
className: "pricing2-table-content-name",
|
||||||
name: "name",
|
name: "name",
|
||||||
children: "系统盘(线性计费)",
|
children: "Integrated CSI",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "content0",
|
name: "content0",
|
||||||
@@ -550,6 +579,7 @@ export const Pricing20DataSource = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export const Pricing11DataSource = {
|
export const Pricing11DataSource = {
|
||||||
wrapper: { className: "home-page-wrapper pricing1-wrapper" },
|
wrapper: { className: "home-page-wrapper pricing1-wrapper" },
|
||||||
page: { className: "home-page pricing1" },
|
page: { className: "home-page pricing1" },
|
||||||
@@ -943,44 +973,53 @@ export const Footer10DataSource = {
|
|||||||
className: "block",
|
className: "block",
|
||||||
title: {
|
title: {
|
||||||
className: "logo",
|
className: "logo",
|
||||||
children:
|
children: (
|
||||||
"https://zos.alipayobjects.com/rmsportal/qqaimmXZVSwAhpL.svg",
|
<img alt="" style={{ width: "100%" }} src={ImexOnlineLogoDark} />
|
||||||
|
),
|
||||||
},
|
},
|
||||||
childWrapper: {
|
childWrapper: {
|
||||||
className: "slogan",
|
className: "slogan",
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
name: "content0",
|
name: "content0",
|
||||||
children: "Animation specification and components of Ant Design.",
|
children: i18n.t("landing.footer.slogan"),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
// {
|
||||||
name: "block1",
|
// name: "block1",
|
||||||
xs: 24,
|
// xs: 24,
|
||||||
md: 6,
|
// md: 6,
|
||||||
className: "block",
|
// className: "block",
|
||||||
title: { children: "产品" },
|
// title: { children: "产品" },
|
||||||
childWrapper: {
|
// childWrapper: {
|
||||||
children: [
|
// children: [
|
||||||
{ name: "link0", href: "#", children: "产品更新记录" },
|
// { name: "link0", href: "#", children: "产品更新记录" },
|
||||||
{ name: "link1", href: "#", children: "API文档" },
|
// { name: "link1", href: "#", children: "API文档" },
|
||||||
{ name: "link2", href: "#", children: "快速入门" },
|
// { name: "link2", href: "#", children: "快速入门" },
|
||||||
{ name: "link3", href: "#", children: "参考指南" },
|
// { name: "link3", href: "#", children: "参考指南" },
|
||||||
],
|
// ],
|
||||||
},
|
// },
|
||||||
},
|
// },
|
||||||
{
|
{
|
||||||
name: "block2",
|
name: "block2",
|
||||||
xs: 24,
|
xs: 24,
|
||||||
md: 6,
|
md: 6,
|
||||||
className: "block",
|
className: "block",
|
||||||
title: { children: "关于" },
|
title: { children: i18n.t("landing.footer.io.name") },
|
||||||
childWrapper: {
|
childWrapper: {
|
||||||
children: [
|
children: [
|
||||||
{ href: "#", name: "link0", children: "FAQ" },
|
{
|
||||||
{ href: "#", name: "link1", children: "联系我们" },
|
href: "https://help.imex.online",
|
||||||
|
name: "link0",
|
||||||
|
children: i18n.t("landing.footer.io.help"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
href: "https://status.imex.online",
|
||||||
|
name: "link1",
|
||||||
|
children: i18n.t("landing.footer.io.status"),
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -989,11 +1028,29 @@ export const Footer10DataSource = {
|
|||||||
xs: 24,
|
xs: 24,
|
||||||
md: 6,
|
md: 6,
|
||||||
className: "block",
|
className: "block",
|
||||||
title: { children: "资源" },
|
title: { children: i18n.t("landing.footer.company.name") },
|
||||||
childWrapper: {
|
childWrapper: {
|
||||||
children: [
|
children: [
|
||||||
{ href: "#", name: "link0", children: "Ant Design" },
|
{
|
||||||
{ href: "#", name: "link1", children: "Ant Motion" },
|
href: "/privacy",
|
||||||
|
name: "link0",
|
||||||
|
children: i18n.t("landing.footer.company.privacypolicy"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
href: "/about",
|
||||||
|
name: "link1",
|
||||||
|
children: i18n.t("landing.footer.company.about"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
href: "/disclaimer",
|
||||||
|
name: "link2",
|
||||||
|
children: i18n.t("landing.footer.company.disclaimers"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
href: "https://thinkimex.com",
|
||||||
|
name: "link3",
|
||||||
|
children: i18n.t("landing.footer.company.contact"),
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -1005,8 +1062,8 @@ export const Footer10DataSource = {
|
|||||||
className: "copyright",
|
className: "copyright",
|
||||||
children: (
|
children: (
|
||||||
<span>
|
<span>
|
||||||
©2018 by <a href="https://motion.ant.design">Ant Motion</a> All Rights
|
©2021 <a href="http://imexsystems.ca">ImEX Systems</a> used under
|
||||||
Reserved
|
license.
|
||||||
</span>
|
</span>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
@@ -1,182 +0,0 @@
|
|||||||
import React, { useState } from "react";
|
|
||||||
import TweenOne from "rc-tween-one";
|
|
||||||
import { Anchor, Menu } from "antd";
|
|
||||||
import { getChildrenToRender } from "./utils";
|
|
||||||
import ImexOnlineLogoLight from "../../assets/ImEX Online Logo.png";
|
|
||||||
import { Link } from "react-router-dom";
|
|
||||||
import { useTranslation } from "react-i18next";
|
|
||||||
const { Item, SubMenu } = Menu;
|
|
||||||
|
|
||||||
export default function LandingNavigator({ dataSource, isMobile, ...props }) {
|
|
||||||
const [state, setState] = useState({ phoneOpen: undefined });
|
|
||||||
const { t } = useTranslation();
|
|
||||||
const { phoneOpen } = state;
|
|
||||||
|
|
||||||
const phoneClick = () => {
|
|
||||||
const phoneOpen = !state.phoneOpen;
|
|
||||||
setState({
|
|
||||||
phoneOpen,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const moment = phoneOpen === undefined ? 300 : null;
|
|
||||||
return (
|
|
||||||
<TweenOne
|
|
||||||
component="header"
|
|
||||||
animation={{ opacity: 0, type: "from" }}
|
|
||||||
className="header0 home-page-wrapper"
|
|
||||||
// {...props}
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
//{...dataSource.page}
|
|
||||||
className={`home-page ${dataSource.page.className}${
|
|
||||||
phoneOpen ? " open" : ""
|
|
||||||
}`}
|
|
||||||
>
|
|
||||||
<TweenOne
|
|
||||||
animation={{ x: -30, type: "from", ease: "easeOutQuad" }}
|
|
||||||
className="header0-logo"
|
|
||||||
// {...dataSource.logo}
|
|
||||||
>
|
|
||||||
<img width="100%" src={ImexOnlineLogoLight} alt="img" />
|
|
||||||
</TweenOne>
|
|
||||||
{isMobile && (
|
|
||||||
//Unknown what this menu does.
|
|
||||||
<div
|
|
||||||
{...dataSource.mobileMenu}
|
|
||||||
onClick={() => {
|
|
||||||
phoneClick();
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<em />
|
|
||||||
<em />
|
|
||||||
<em />
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
<TweenOne
|
|
||||||
// {...dataSource.Menu}
|
|
||||||
className="header0-menu"
|
|
||||||
animation={
|
|
||||||
isMobile
|
|
||||||
? {
|
|
||||||
height: 0,
|
|
||||||
duration: 300,
|
|
||||||
onComplete: (e) => {
|
|
||||||
if (state.phoneOpen) {
|
|
||||||
e.target.style.height = "auto";
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ease: "easeInOutQuad",
|
|
||||||
}
|
|
||||||
: null
|
|
||||||
}
|
|
||||||
moment={moment}
|
|
||||||
reverse={!!phoneOpen}
|
|
||||||
>
|
|
||||||
<Menu
|
|
||||||
mode={isMobile ? "inline" : "horizontal"}
|
|
||||||
defaultSelectedKeys={["sub0"]}
|
|
||||||
theme="dark"
|
|
||||||
>
|
|
||||||
<Item className="header0-item">
|
|
||||||
<Link to={{ hash: "#features" }} className={`header0-item-block`}>
|
|
||||||
{t("landing.labels.features")}
|
|
||||||
</Link>
|
|
||||||
</Item>
|
|
||||||
<Item className="header0-item">
|
|
||||||
<Link to={{ hash: "#pricing" }} className={`header0-item-block`}>
|
|
||||||
{t("landing.labels.pricing")}
|
|
||||||
</Link>
|
|
||||||
</Item>
|
|
||||||
<Item className="header0-item">
|
|
||||||
<Link to={`/manage`} className={`header0-item-block`}>
|
|
||||||
{t("landing.labels.managemyshop")}
|
|
||||||
</Link>
|
|
||||||
</Item>
|
|
||||||
</Menu>
|
|
||||||
</TweenOne>
|
|
||||||
</div>
|
|
||||||
</TweenOne>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// <SubMenu
|
|
||||||
// key={item.name}
|
|
||||||
// {...itemProps}
|
|
||||||
// title={
|
|
||||||
// <div {...a} className={`header0-item-block ${a.className}`.trim()}>
|
|
||||||
// {a.children.map(getChildrenToRender)}
|
|
||||||
// </div>
|
|
||||||
// }
|
|
||||||
// popupClassName="header0-item-child"
|
|
||||||
// >
|
|
||||||
// {subItem.map(($item, ii) => {
|
|
||||||
// const { children: childItem } = $item;
|
|
||||||
// const child = childItem.href ? (
|
|
||||||
// <a {...childItem}>
|
|
||||||
// {childItem.children.map(getChildrenToRender)}
|
|
||||||
// </a>
|
|
||||||
// ) : (
|
|
||||||
// <div {...childItem}>
|
|
||||||
// {childItem.children.map(getChildrenToRender)}
|
|
||||||
// </div>
|
|
||||||
// );
|
|
||||||
// return (
|
|
||||||
// <Item key={$item.name || ii.toString()} {...$item}>
|
|
||||||
// {child}
|
|
||||||
// </Item>
|
|
||||||
// );
|
|
||||||
// })}
|
|
||||||
// </SubMenu>
|
|
||||||
// subItem: [
|
|
||||||
// {
|
|
||||||
// name: "sub0",
|
|
||||||
// className: "item-sub",
|
|
||||||
// children: {
|
|
||||||
// className: "item-sub-item",
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// name: "image0",
|
|
||||||
// className: "item-image",
|
|
||||||
// children:
|
|
||||||
// "https://gw.alipayobjects.com/zos/rmsportal/ruHbkzzMKShUpDYMEmHM.svg",
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: "title",
|
|
||||||
// className: "item-title",
|
|
||||||
// children: "Ant Design",
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: "content",
|
|
||||||
// className: "item-content",
|
|
||||||
// children: "企业级 UI 设计体系",
|
|
||||||
// },
|
|
||||||
// ],
|
|
||||||
// },
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: "sub1",
|
|
||||||
// className: "item-sub",
|
|
||||||
// children: {
|
|
||||||
// className: "item-sub-item",
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// name: "image0",
|
|
||||||
// className: "item-image",
|
|
||||||
// children:
|
|
||||||
// "https://gw.alipayobjects.com/zos/rmsportal/ruHbkzzMKShUpDYMEmHM.svg",
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: "title",
|
|
||||||
// className: "item-title",
|
|
||||||
// children: "Ant Design",
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: "content",
|
|
||||||
// className: "item-content",
|
|
||||||
// children: "企业级 UI 设计体系",
|
|
||||||
// },
|
|
||||||
// ],
|
|
||||||
// },
|
|
||||||
// },
|
|
||||||
// ],
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
@import "./common.less";
|
|
||||||
@import "./custom.less";
|
|
||||||
@import "./content.less";
|
|
||||||
@import "./LandingNavigator.less";
|
|
||||||
@import "./banner0.less";
|
|
||||||
@import "./content4.less";
|
|
||||||
@import "./content0.less";
|
|
||||||
@import "./content1.less";
|
|
||||||
@import "./pricing2.less";
|
|
||||||
@import "./pricing1.less";
|
|
||||||
@import "./content3.less";
|
|
||||||
@import "./content12.less";
|
|
||||||
@import "./footer1.less";
|
|
||||||
@import "./edit.less";
|
|
||||||
@@ -1,32 +1,30 @@
|
|||||||
/* eslint no-undef: 0 */
|
/* eslint no-undef: 0 */
|
||||||
/* eslint arrow-parens: 0 */
|
/* eslint arrow-parens: 0 */
|
||||||
import React from "react";
|
|
||||||
import { enquireScreen } from "enquire-js";
|
import { enquireScreen } from "enquire-js";
|
||||||
import { Anchor } from "antd";
|
import React from "react";
|
||||||
import LandingNavigator from "./LandingNavigator";
|
|
||||||
import Banner0 from "./Banner0";
|
import Banner0 from "./Banner0";
|
||||||
import Content4 from "./Content4";
|
// import Content4 from "./Content4";
|
||||||
import Content0 from "./Content0";
|
import Content0 from "./Content0";
|
||||||
import Content1 from "./Content1";
|
import Content1 from "./Content1";
|
||||||
import Pricing2 from "./Pricing2";
|
|
||||||
import Pricing1 from "./Pricing1";
|
|
||||||
import Content3 from "./Content3";
|
|
||||||
import Content12 from "./Content12";
|
|
||||||
import Footer1 from "./Footer1";
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
Nav00DataSource,
|
|
||||||
Banner00DataSource,
|
Banner00DataSource,
|
||||||
Content40DataSource,
|
// Content40DataSource,
|
||||||
Content00DataSource,
|
Content00DataSource,
|
||||||
Content10DataSource,
|
Content10DataSource,
|
||||||
Pricing20DataSource,
|
// Pricing11DataSource,
|
||||||
Pricing11DataSource,
|
// Content30DataSource,
|
||||||
Content30DataSource,
|
// Content120DataSource,
|
||||||
Content120DataSource,
|
|
||||||
Footer10DataSource,
|
Footer10DataSource,
|
||||||
|
Nav00DataSource,
|
||||||
|
Pricing20DataSource,
|
||||||
} from "./data.source";
|
} from "./data.source";
|
||||||
|
// import Pricing1 from "./Pricing1";
|
||||||
|
// import Content3 from "./Content3";
|
||||||
|
// import Content12 from "./Content12";
|
||||||
|
import Footer1 from "./Footer1";
|
||||||
import "./less/antMotionStyle.less";
|
import "./less/antMotionStyle.less";
|
||||||
|
import Nav0 from "./Nav0";
|
||||||
|
import Pricing2 from "./Pricing2";
|
||||||
|
|
||||||
let isMobile;
|
let isMobile;
|
||||||
enquireScreen((b) => {
|
enquireScreen((b) => {
|
||||||
@@ -64,7 +62,7 @@ export default class Home extends React.Component {
|
|||||||
|
|
||||||
render() {
|
render() {
|
||||||
const children = [
|
const children = [
|
||||||
<LandingNavigator
|
<Nav0
|
||||||
id="Nav0_0"
|
id="Nav0_0"
|
||||||
key="Nav0_0"
|
key="Nav0_0"
|
||||||
dataSource={Nav00DataSource}
|
dataSource={Nav00DataSource}
|
||||||
@@ -76,10 +74,16 @@ export default class Home extends React.Component {
|
|||||||
dataSource={Banner00DataSource}
|
dataSource={Banner00DataSource}
|
||||||
isMobile={this.state.isMobile}
|
isMobile={this.state.isMobile}
|
||||||
/>,
|
/>,
|
||||||
<Content4
|
// <Content4
|
||||||
id="Content4_0"
|
// id="Content4_0"
|
||||||
key="Content4_0"
|
// key="Content4_0"
|
||||||
dataSource={Content40DataSource}
|
// dataSource={Content40DataSource}
|
||||||
|
// isMobile={this.state.isMobile}
|
||||||
|
// />,
|
||||||
|
<Content1
|
||||||
|
id="Content1_0"
|
||||||
|
key="Content1_0"
|
||||||
|
dataSource={Content10DataSource}
|
||||||
isMobile={this.state.isMobile}
|
isMobile={this.state.isMobile}
|
||||||
/>,
|
/>,
|
||||||
<Content0
|
<Content0
|
||||||
@@ -88,36 +92,30 @@ export default class Home extends React.Component {
|
|||||||
dataSource={Content00DataSource}
|
dataSource={Content00DataSource}
|
||||||
isMobile={this.state.isMobile}
|
isMobile={this.state.isMobile}
|
||||||
/>,
|
/>,
|
||||||
<Content1
|
|
||||||
id="Content1_0"
|
|
||||||
key="Content1_0"
|
|
||||||
dataSource={Content10DataSource}
|
|
||||||
isMobile={this.state.isMobile}
|
|
||||||
/>,
|
|
||||||
<Pricing2
|
<Pricing2
|
||||||
id="Pricing2_0"
|
id="Pricing2_0"
|
||||||
key="Pricing2_0"
|
key="Pricing2_0"
|
||||||
dataSource={Pricing20DataSource}
|
dataSource={Pricing20DataSource}
|
||||||
isMobile={this.state.isMobile}
|
isMobile={this.state.isMobile}
|
||||||
/>,
|
/>,
|
||||||
<Pricing1
|
// <Pricing1
|
||||||
id="Pricing1_1"
|
// id="Pricing1_1"
|
||||||
key="Pricing1_1"
|
// key="Pricing1_1"
|
||||||
dataSource={Pricing11DataSource}
|
// dataSource={Pricing11DataSource}
|
||||||
isMobile={this.state.isMobile}
|
// isMobile={this.state.isMobile}
|
||||||
/>,
|
// />,
|
||||||
<Content3
|
// <Content3
|
||||||
id="Content3_0"
|
// id="Content3_0"
|
||||||
key="Content3_0"
|
// key="Content3_0"
|
||||||
dataSource={Content30DataSource}
|
// dataSource={Content30DataSource}
|
||||||
isMobile={this.state.isMobile}
|
// isMobile={this.state.isMobile}
|
||||||
/>,
|
// />,
|
||||||
<Content12
|
// <Content12
|
||||||
id="Content12_0"
|
// id="Content12_0"
|
||||||
key="Content12_0"
|
// key="Content12_0"
|
||||||
dataSource={Content120DataSource}
|
// dataSource={Content120DataSource}
|
||||||
isMobile={this.state.isMobile}
|
// isMobile={this.state.isMobile}
|
||||||
/>,
|
// />,
|
||||||
<Footer1
|
<Footer1
|
||||||
id="Footer1_0"
|
id="Footer1_0"
|
||||||
key="Footer1_0"
|
key="Footer1_0"
|
||||||
@@ -132,10 +130,9 @@ export default class Home extends React.Component {
|
|||||||
this.dom = d;
|
this.dom = d;
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Anchor>
|
{/* 如果不是 dva 2.0 替换成 {children} start */}
|
||||||
{this.state.show && children}
|
{this.state.show && children}
|
||||||
{/* 如果不是 dva 2.0 替换成 {children} end */}
|
{/* 如果不是 dva 2.0 替换成 {children} end */}
|
||||||
</Anchor>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
14
client/src/landing/less/antMotionStyle.less
Normal file
14
client/src/landing/less/antMotionStyle.less
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
@import './common.less';
|
||||||
|
@import './custom.less';
|
||||||
|
@import './content.less';
|
||||||
|
@import './nav0.less';
|
||||||
|
@import './banner0.less';
|
||||||
|
@import './content4.less';
|
||||||
|
@import './content0.less';
|
||||||
|
@import './content1.less';
|
||||||
|
@import './pricing2.less';
|
||||||
|
@import './pricing1.less';
|
||||||
|
@import './content3.less';
|
||||||
|
@import './content12.less';
|
||||||
|
@import './footer1.less';
|
||||||
|
@import './edit.less';
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
border-color: #666;
|
border-color: #666;
|
||||||
background-image: url("https://zos.alipayobjects.com/rmsportal/gGlUMYGEIvjDOOw.jpg");
|
background-image: url("../../assets/banner3.jpeg");
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
background-attachment: fixed;
|
background-attachment: fixed;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
@@ -20,13 +20,13 @@
|
|||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: @template-text-color-light;
|
color: @template-text-color-light;
|
||||||
width: 550px;
|
width: 550px;
|
||||||
>.queue-anim-leaving {
|
> .queue-anim-leaving {
|
||||||
position: relative !important;
|
position: relative !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
& &-title {
|
& &-title {
|
||||||
width: 350px;
|
width: 350px;
|
||||||
left: 30px;
|
//left: 30px;
|
||||||
min-height: 60px;
|
min-height: 60px;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
box-shadow: 0 0 0 transparent;
|
box-shadow: 0 0 0 transparent;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
transition: background .45s @ease-out, box-shadow .45s @ease-out;
|
transition: background 0.45s @ease-out, box-shadow 0.45s @ease-out;
|
||||||
&:hover {
|
&:hover {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
border-color: #fff;
|
border-color: #fff;
|
||||||
@@ -3,7 +3,7 @@ import { connect } from "react-redux";
|
|||||||
import { Redirect } from "react-router-dom";
|
import { Redirect } from "react-router-dom";
|
||||||
import { createStructuredSelector } from "reselect";
|
import { createStructuredSelector } from "reselect";
|
||||||
import { selectCurrentUser } from "../../redux/user/user.selectors";
|
import { selectCurrentUser } from "../../redux/user/user.selectors";
|
||||||
import LandingPageStatic from "../../landing/home/index";
|
import LandingPageStatic from "../../landing/index";
|
||||||
|
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
currentUser: selectCurrentUser,
|
currentUser: selectCurrentUser,
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import FcmNotification from "../../components/fcm-notification/fcm-notification.
|
|||||||
//import FooterComponent from "../../components/footer/footer.component";
|
//import FooterComponent from "../../components/footer/footer.component";
|
||||||
//Component Imports
|
//Component Imports
|
||||||
import HeaderContainer from "../../components/header/header.container";
|
import HeaderContainer from "../../components/header/header.container";
|
||||||
import JiraSupportComponent from "../../components/jira-support-widget/jira-support-widget.component";
|
|
||||||
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
|
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
|
||||||
import PartnerPingComponent from "../../components/partner-ping/partner-ping.component";
|
import PartnerPingComponent from "../../components/partner-ping/partner-ping.component";
|
||||||
import PrintCenterModalContainer from "../../components/print-center-modal/print-center-modal.container";
|
import PrintCenterModalContainer from "../../components/print-center-modal/print-center-modal.container";
|
||||||
@@ -408,10 +407,9 @@ export function Manage({ match, conflict, bodyshop }) {
|
|||||||
</div>
|
</div>
|
||||||
<div id="noticeable-widget" style={{ marginLeft: "1rem" }} />
|
<div id="noticeable-widget" style={{ marginLeft: "1rem" }} />
|
||||||
</div>
|
</div>
|
||||||
<Link to="/about" target="_blank" style={{ color: "#ccc" }}>
|
<Link to="/disclaimer" target="_blank" style={{ color: "#ccc" }}>
|
||||||
Disclaimer & Notices
|
Disclaimer & Notices
|
||||||
</Link>
|
</Link>
|
||||||
<JiraSupportComponent />
|
|
||||||
</div>
|
</div>
|
||||||
</Footer>
|
</Footer>
|
||||||
</Content>
|
</Content>
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import LoadingSpinner from "../../components/loading-spinner/loading-spinner.com
|
|||||||
import { QUERY_BODYSHOP } from "../../graphql/bodyshop.queries";
|
import { QUERY_BODYSHOP } from "../../graphql/bodyshop.queries";
|
||||||
import { setBodyshop } from "../../redux/user/user.actions";
|
import { setBodyshop } from "../../redux/user/user.actions";
|
||||||
import ManagePage from "./manage.page.component";
|
import ManagePage from "./manage.page.component";
|
||||||
|
import "../../utils/RegisterSw";
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBodyshop: (bs) => dispatch(setBodyshop(bs)),
|
setBodyshop: (bs) => dispatch(setBodyshop(bs)),
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import LoadingSpinner from "../../components/loading-spinner/loading-spinner.com
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
import { createStructuredSelector } from "reselect";
|
import { createStructuredSelector } from "reselect";
|
||||||
|
import "../../utils/RegisterSw";
|
||||||
|
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
bodyshop: selectBodyshop,
|
bodyshop: selectBodyshop,
|
||||||
|
|||||||
@@ -1424,10 +1424,53 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"landing": {
|
"landing": {
|
||||||
|
"bigfeature": {
|
||||||
|
"subtitle": "ImEX Online is built using world class technology by experts in the collision repair industry. This translates to software that is tailor made for the unique challenges faced by repair facilities with no compromises. ",
|
||||||
|
"title": "Bringing the latest technology to the automotive repair industry. "
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"company": {
|
||||||
|
"about": "About Us",
|
||||||
|
"contact": "Contact",
|
||||||
|
"disclaimers": "Disclaimers",
|
||||||
|
"name": "Company",
|
||||||
|
"privacypolicy": "Privacy Policy"
|
||||||
|
},
|
||||||
|
"io": {
|
||||||
|
"help": "Help",
|
||||||
|
"name": "ImEX Online",
|
||||||
|
"status": "System Status"
|
||||||
|
},
|
||||||
|
"slogan": "The future of shop management systems. "
|
||||||
|
},
|
||||||
|
"hero": {
|
||||||
|
"button": "Learn More",
|
||||||
|
"title": "Bringing the future to the collision repair process."
|
||||||
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"features": "Features",
|
"features": "Features",
|
||||||
"managemyshop": "Manage my Shop",
|
"managemyshop": "Manage my Shop",
|
||||||
"pricing": "Pricing"
|
"pricing": "Pricing"
|
||||||
|
},
|
||||||
|
"pricing": {
|
||||||
|
"basic": {
|
||||||
|
"name": "Basic",
|
||||||
|
"sub": "Best suited for shops looking to increase their volume."
|
||||||
|
},
|
||||||
|
"essentials": {
|
||||||
|
"name": "Essentials",
|
||||||
|
"sub": "Best suited for small and low volume shops."
|
||||||
|
},
|
||||||
|
"pricingtitle": "Features",
|
||||||
|
"pro": {
|
||||||
|
"name": "Pro",
|
||||||
|
"sub": "Empower your shop with the tools to operate at peak capacity."
|
||||||
|
},
|
||||||
|
"title": "Features",
|
||||||
|
"unlimited": {
|
||||||
|
"name": "Unlimited",
|
||||||
|
"sub": "Everything you need and more for the high volume shop."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"menus": {
|
"menus": {
|
||||||
|
|||||||
@@ -1424,10 +1424,53 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"landing": {
|
"landing": {
|
||||||
|
"bigfeature": {
|
||||||
|
"subtitle": "",
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"company": {
|
||||||
|
"about": "",
|
||||||
|
"contact": "",
|
||||||
|
"disclaimers": "",
|
||||||
|
"name": "",
|
||||||
|
"privacypolicy": ""
|
||||||
|
},
|
||||||
|
"io": {
|
||||||
|
"help": "",
|
||||||
|
"name": "",
|
||||||
|
"status": ""
|
||||||
|
},
|
||||||
|
"slogan": ""
|
||||||
|
},
|
||||||
|
"hero": {
|
||||||
|
"button": "",
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"features": "",
|
"features": "",
|
||||||
"managemyshop": "",
|
"managemyshop": "",
|
||||||
"pricing": ""
|
"pricing": ""
|
||||||
|
},
|
||||||
|
"pricing": {
|
||||||
|
"basic": {
|
||||||
|
"name": "",
|
||||||
|
"sub": ""
|
||||||
|
},
|
||||||
|
"essentials": {
|
||||||
|
"name": "",
|
||||||
|
"sub": ""
|
||||||
|
},
|
||||||
|
"pricingtitle": "",
|
||||||
|
"pro": {
|
||||||
|
"name": "",
|
||||||
|
"sub": ""
|
||||||
|
},
|
||||||
|
"title": "",
|
||||||
|
"unlimited": {
|
||||||
|
"name": "",
|
||||||
|
"sub": ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"menus": {
|
"menus": {
|
||||||
|
|||||||
@@ -1424,10 +1424,53 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"landing": {
|
"landing": {
|
||||||
|
"bigfeature": {
|
||||||
|
"subtitle": "",
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"company": {
|
||||||
|
"about": "",
|
||||||
|
"contact": "",
|
||||||
|
"disclaimers": "",
|
||||||
|
"name": "",
|
||||||
|
"privacypolicy": ""
|
||||||
|
},
|
||||||
|
"io": {
|
||||||
|
"help": "",
|
||||||
|
"name": "",
|
||||||
|
"status": ""
|
||||||
|
},
|
||||||
|
"slogan": ""
|
||||||
|
},
|
||||||
|
"hero": {
|
||||||
|
"button": "",
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"features": "",
|
"features": "",
|
||||||
"managemyshop": "",
|
"managemyshop": "",
|
||||||
"pricing": ""
|
"pricing": ""
|
||||||
|
},
|
||||||
|
"pricing": {
|
||||||
|
"basic": {
|
||||||
|
"name": "",
|
||||||
|
"sub": ""
|
||||||
|
},
|
||||||
|
"essentials": {
|
||||||
|
"name": "",
|
||||||
|
"sub": ""
|
||||||
|
},
|
||||||
|
"pricingtitle": "",
|
||||||
|
"pro": {
|
||||||
|
"name": "",
|
||||||
|
"sub": ""
|
||||||
|
},
|
||||||
|
"title": "",
|
||||||
|
"unlimited": {
|
||||||
|
"name": "",
|
||||||
|
"sub": ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"menus": {
|
"menus": {
|
||||||
|
|||||||
@@ -23,7 +23,9 @@ i18n
|
|||||||
debug: process.env.NODE_ENV === "production" ? false : true,
|
debug: process.env.NODE_ENV === "production" ? false : true,
|
||||||
|
|
||||||
//keySeparator: false, // we do not use keys in form messages.welcome
|
//keySeparator: false, // we do not use keys in form messages.welcome
|
||||||
|
react: {
|
||||||
|
wait: true,
|
||||||
|
},
|
||||||
interpolation: {
|
interpolation: {
|
||||||
escapeValue: false, // react already safes from xss
|
escapeValue: false, // react already safes from xss
|
||||||
},
|
},
|
||||||
|
|||||||
46
client/src/utils/RegisterSw.js
Normal file
46
client/src/utils/RegisterSw.js
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import { AlertOutlined } from "@ant-design/icons";
|
||||||
|
import { Button, notification, Space } from "antd";
|
||||||
|
import i18n from "i18next";
|
||||||
|
import React from "react";
|
||||||
|
import * as serviceWorkerRegistration from "../serviceWorkerRegistration";
|
||||||
|
|
||||||
|
const onServiceWorkerUpdate = (registration) => {
|
||||||
|
console.log("onServiceWorkerUpdate", registration);
|
||||||
|
|
||||||
|
const btn = (
|
||||||
|
<Space flex>
|
||||||
|
<Button
|
||||||
|
onClick={async () => {
|
||||||
|
window.open("https://imex-online.noticeable.news/", "_blank");
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{i18n.t("general.actions.viewreleasenotes")}
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
type="primary"
|
||||||
|
onClick={async () => {
|
||||||
|
if (registration && registration.waiting) {
|
||||||
|
await registration.unregister();
|
||||||
|
// Makes Workbox call skipWaiting()
|
||||||
|
registration.waiting.postMessage({ type: "SKIP_WAITING" });
|
||||||
|
// Once the service worker is unregistered, we can reload the page to let
|
||||||
|
// the browser download a fresh copy of our app (invalidating the cache)
|
||||||
|
window.location.reload();
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{i18n.t("general.actions.refresh")}
|
||||||
|
</Button>
|
||||||
|
</Space>
|
||||||
|
);
|
||||||
|
notification.open({
|
||||||
|
icon: <AlertOutlined />,
|
||||||
|
message: i18n.t("general.messages.newversiontitle"),
|
||||||
|
description: i18n.t("general.messages.newversionmessage"),
|
||||||
|
duration: 0,
|
||||||
|
btn,
|
||||||
|
key: "updateavailable",
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
serviceWorkerRegistration.register({ onUpdate: onServiceWorkerUpdate });
|
||||||
Reference in New Issue
Block a user