Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions apps/react17/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + React + TS</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
27 changes: 27 additions & 0 deletions apps/react17/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"name": "react-17-example",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
"preview": "vite preview"
},
"dependencies": {
"@flatfile/api": "*",
"@flatfile/hooks": "*",
"@flatfile/listener": "*",
"@flatfile/plugin-record-hook": "*",
"@flatfile/react": "*",
"react": "^17.0.2",
"react-dom": "^17.0.2"
},
"devDependencies": {
"@types/react": "^17.0.2",
"@types/react-dom": "^17.0.2",
"@vitejs/plugin-react": "^4.3.1",
"vite": "^4.5.5"
}
}
1 change: 1 addition & 0 deletions apps/react17/public/vite.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
42 changes: 42 additions & 0 deletions apps/react17/src/App.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#root {
max-width: 1280px;
margin: 0 auto;
padding: 2rem;
text-align: center;
}

.logo {
height: 6em;
padding: 1.5em;
will-change: filter;
transition: filter 300ms;
}
.logo:hover {
filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.react:hover {
filter: drop-shadow(0 0 2em #61dafbaa);
}

@keyframes logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}

@media (prefers-reduced-motion: no-preference) {
a:nth-of-type(2) .logo {
animation: logo-spin infinite 20s linear;
}
}

.card {
padding: 2em;
}

.read-the-docs {
color: #888;
}
38 changes: 38 additions & 0 deletions apps/react17/src/App.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
'use client'
import reactLogo from './assets/react.svg'
import viteLogo from '/vite.svg'
import './App.css'
import { FlatFilePlatform } from './FlatfilePlatform'
import {
ClickableComponent,
useListner,
useWorkbook,
} from './upload-components'
import { FlatfileProvider } from '@flatfile/react'
import { version as ReactVersion } from 'react'

export const App = ({ PUBLISHABLE_KEY }: { PUBLISHABLE_KEY: string }) => {
console.log('APP APP APP')
const listener = useListner()
console.log({ listener })
const workbook = useWorkbook()
return (
<FlatfileProvider publishableKey={PUBLISHABLE_KEY}>
<div>
<h1>Hello from React {ReactVersion}</h1>
<a href="https://vitejs.dev" target="_blank">
<img src={viteLogo} className="logo" alt="Vite logo" />
</a>
<a href="https://react.dev" target="_blank">
<img src={reactLogo} className="logo react" alt="React logo" />
</a>
</div>
<h1>Flatfile Platform</h1>
<FlatFilePlatform
listener={listener}
workbook={workbook}
ActionComponent={ClickableComponent}
/>
</FlatfileProvider>
)
}
48 changes: 48 additions & 0 deletions apps/react17/src/FlatfilePlatform.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import { FC } from 'react';
import { Space, Workbook, useFlatfile, useListener, } from '@flatfile/react';
import FlatfileListener from '@flatfile/listener';
import { CreateWorkbookConfig } from '@flatfile/api/api';

interface ActionComponentProps {
open: boolean;
closePortal: () => void;
openPortal: () => void;
}

export const FlatFilePlatform: FC<{
workbook: CreateWorkbookConfig;
listener: (client: FlatfileListener) => void;
ActionComponent: React.FC<ActionComponentProps>;
}> = (props) => {

const { workbook, listener, ActionComponent } = props;

const { open, openPortal, closePortal } = useFlatfile();
useListener(listener, [listener])


return <div className="content">
<ActionComponent
open={open}
closePortal={closePortal}
openPortal={openPortal}
/>
<Space
config={{
name: 'Test Space',
metadata: {
sidebarConfig: {
showSidebar: false,
},
},
}}
>
<Workbook
config={workbook}
onSubmit={() => {
console.log('submitted');
}}
/>
</Space>
</div>
};
1 change: 1 addition & 0 deletions apps/react17/src/assets/react.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions apps/react17/src/config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const PUBLISHABLE_KEY = "pk_aa746df15610411e9649124119d6ec4c";
68 changes: 68 additions & 0 deletions apps/react17/src/index.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
:root {
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;

color-scheme: light dark;
color: rgba(255, 255, 255, 0.87);
background-color: #242424;

font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}

a {
font-weight: 500;
color: #646cff;
text-decoration: inherit;
}
a:hover {
color: #535bf2;
}

body {
margin: 0;
display: flex;
place-items: center;
min-width: 320px;
min-height: 100vh;
}

h1 {
font-size: 3.2em;
line-height: 1.1;
}

button {
border-radius: 8px;
border: 1px solid transparent;
padding: 0.6em 1.2em;
font-size: 1em;
font-weight: 500;
font-family: inherit;
background-color: #1a1a1a;
cursor: pointer;
transition: border-color 0.25s;
}
button:hover {
border-color: #646cff;
}
button:focus,
button:focus-visible {
outline: 4px auto -webkit-focus-ring-color;
}

@media (prefers-color-scheme: light) {
:root {
color: #213547;
background-color: #ffffff;
}
a:hover {
color: #747bff;
}
button {
background-color: #f9f9f9;
}
}
28 changes: 28 additions & 0 deletions apps/react17/src/main.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import React from "react";

// use this for react 17
import ReactDOM from "react-dom";

// use this for react 18
// import ReactDOM from 'react-dom/client';

import "./index.css";
import { PUBLISHABLE_KEY } from "./config.ts";
import { App } from "./App.tsx";

const rootEl = document.getElementById("root")!;

// Use this for React 17
ReactDOM.render(
<React.StrictMode>
<App PUBLISHABLE_KEY={PUBLISHABLE_KEY} />
</React.StrictMode>,
rootEl
);

// Use this for React 18
// ReactDOM.createRoot(rootEl).render(
// <React.StrictMode>
// <App PUBLISHABLE_KEY={PUBLISHABLE_KEY} />
// </React.StrictMode>
// );
21 changes: 21 additions & 0 deletions apps/react17/src/upload-components/ClickableComponent.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { FC } from 'react';

export const ClickableComponent: FC<{
closePortal: () => void;
openPortal: () => void;
open: any;
}> = ({ open, closePortal, openPortal }) => {
return (
<>
<div>
<button
onClick={() => {
open ? closePortal() : openPortal();
}}
>
{open === true ? 'Close' : 'Open'}
</button>
</div>
</>
);
};
3 changes: 3 additions & 0 deletions apps/react17/src/upload-components/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export * from './ClickableComponent';
export * from './useListener';
export * from './useWorkbook';
26 changes: 26 additions & 0 deletions apps/react17/src/upload-components/useListener.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { FlatfileListener } from "@flatfile/listener";
import { recordHook } from "@flatfile/plugin-record-hook";

const regex = /^[a-zA-Z0-9\s.\-_,']+$/;

export const useListner = (): ((client: FlatfileListener) => void) => {
console.log("USE LISTENER HOOK");
return (client: FlatfileListener) => {
console.log("TEST TEST");
client.use(
recordHook("test", (record) => {
console.log({ record });
record.validate(
"code",
(value) => {
console.log(value);
return value !== null && regex.test(value.toString());
},
"Invalid code, allowed characters are: a-z, A-Z, 0-9, space, ., -, _, ', and ,"
);

return record;
})
);
};
};
53 changes: 53 additions & 0 deletions apps/react17/src/upload-components/useWorkbook.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import { Flatfile } from '@flatfile/api';

export const useWorkbook = (): Pick<
Flatfile.CreateWorkbookConfig,
'name' | 'labels' | 'sheets' | 'actions'
> => {

return {
name: 'All Data',
labels: ['pinned'],
sheets: [
{
name: 'Test',
slug: 'test',
fields: [
{
key: 'code',
type: 'string',
label: 'Code',
},
{
key: 'type',
type: 'enum',
label: 'Quote Type',

config: {
options: [
{
value: 'cost',
label: 'Cost',
},
{
value: 'revenue',
label: 'Revenue',
}
]
},
},
]
},
],
actions: [
{
operation: 'submitActionFg',
mode: 'foreground',
label: 'Submit foreground',
description: 'Submit jobId, envId, workbookId to data upload services',
primary: true,
constraints: [{ type: 'hasAllValid' }, { type: 'hasData' }],
},
],
};
};
1 change: 1 addition & 0 deletions apps/react17/src/vite-env.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/// <reference types="vite/client" />
Loading