Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add FileSelector #566

Merged
merged 3 commits into from
Oct 31, 2024
Merged
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
5 changes: 4 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
{
"eslint.validate": ["json"]
"eslint.validate": [
"json"
],
"typescript.tsdk": "node_modules/typescript/lib"
}
20 changes: 10 additions & 10 deletions apps/element-storybook/.storybook/main.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { dirname, join } from "path";
import { dirname, join } from 'path';
import remarkGfm from 'remark-gfm';
import { StorybookConfig } from '@storybook/react-vite';

Expand All @@ -7,13 +7,13 @@ const config: StorybookConfig = {
'../src/*.mdx',
'../src/**/*.@(stories.@(js|jsx|ts|tsx|mdx))',
'../../../packages/*/*.mdx',
'../../../packages/*/src/lib/*.@(stories.@(js|jsx|ts|tsx|mdx))'
'../../../packages/*/src/lib/*.@(stories.@(js|jsx|ts|tsx|mdx))',
],

addons: [
getAbsolutePath("@storybook/addon-essentials"),
getAbsolutePath("@storybook/addon-themes"),
getAbsolutePath("@storybook/addon-a11y"),
getAbsolutePath('@storybook/addon-essentials'),
getAbsolutePath('@storybook/addon-themes'),
getAbsolutePath('@storybook/addon-a11y'),
{
name: '@storybook/addon-docs',
options: {
Expand All @@ -24,11 +24,11 @@ const config: StorybookConfig = {
},
},
},
getAbsolutePath("@chromatic-com/storybook")
getAbsolutePath('@chromatic-com/storybook'),
],

framework: {
name: getAbsolutePath("@storybook/react-vite"),
name: getAbsolutePath('@storybook/react-vite'),
options: {
builder: {
viteConfigPath: '',
Expand All @@ -44,7 +44,7 @@ const config: StorybookConfig = {
: true,
},

reactDocgen: 'react-docgen-typescript'
reactDocgen: 'react-docgen-typescript',
},

staticDirs: ['../../../static'],
Expand All @@ -57,6 +57,6 @@ export default config;
// Check https://storybook.js.org/docs/react/builders/vite#configuration
// and https://nx.dev/packages/storybook/documents/custom-builder-configs

function getAbsolutePath(value: string): any {
return dirname(require.resolve(join(value, "package.json")));
function getAbsolutePath(value: string) {
return dirname(require.resolve(join(value, 'package.json')));
}
3 changes: 2 additions & 1 deletion jest.config.global.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,11 @@ module.exports = {
},
coverageReporters: ['json'],
moduleNameMapper: {
uuid: require.resolve('uuid'),
...pathsToModuleNameMapper(compilerOptions.paths, { prefix: '<rootDir>/../../' }),
'\\.(css|scss)$': 'identity-obj-proxy',
},
testEnvironmentOptions: {
customExportConditions: [''],
}
},
};
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"create:generator": "nx generate @nx/plugin:generator ${1} --project=${0}",
"create:package": "nx generate @availity/nx-generator:nx-generator ${0}",
"create:plugin": "nx g @nx/plugin:plugin ${0}",
"lint": "nx run-many --target=lint --all --exclude=nx-generator",
"lint:affected": "nx affected --target=lint --exclude=nx-generator",
"postinstall": "is-ci || husky install",
"publish:affected": "nx affected --target=publish",
Expand Down Expand Up @@ -95,7 +96,8 @@
"tslib": "^2.6.2",
"typescript": "5.4.5",
"undici": "^5.28.4",
"vite": "5.2.8"
"vite": "5.2.8",
"vite-plugin-node-polyfills": "^0.22.0"
},
"resolutions": {
"markdown-to-jsx": "7.1.9"
Expand Down
2 changes: 1 addition & 1 deletion packages/autocomplete/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"@mui/types": "^7.2.14"
},
"devDependencies": {
"@availity/api-axios": "^9.0.0",
"@availity/api-axios": "^9.0.4",
"@availity/mui-form-utils": "workspace:^",
"@availity/mui-textfield": "workspace:^",
"@mui/material": "^5.15.15",
Expand Down
2 changes: 1 addition & 1 deletion packages/avatar/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
"access": "public"
},
"dependencies": {
"@availity/api-axios": "^9.0.0",
"@availity/api-axios": "^9.0.4",
"@availity/design-tokens": "workspace:^"
}
}
2 changes: 1 addition & 1 deletion packages/divider/src/lib/Divider.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { default as MuiDivider, DividerProps as MuiDividerProps } from '@mui/material/Divider';

export type DividerProps = Omit<MuiDividerProps, 'children' | 'textAlign'>;
export type DividerProps = Omit<MuiDividerProps, 'textAlign'>;

export const Divider = (props: DividerProps): JSX.Element => {
return <MuiDivider {...props} />;
Expand Down
1 change: 1 addition & 0 deletions packages/element/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
"@availity/mui-event-tracker": "workspace:*",
"@availity/mui-favorites": "workspace:*",
"@availity/mui-feedback": "workspace:*",
"@availity/mui-file-selector": "workspace:*",
"@availity/mui-form-utils": "workspace:*",
"@availity/mui-icon": "workspace:*",
"@availity/mui-layout": "workspace:*",
Expand Down
1 change: 1 addition & 0 deletions packages/element/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export * from '@availity/mui-empty-state';
export * from '@availity/mui-event-tracker';
export * from '@availity/mui-favorites';
export * from '@availity/mui-feedback';
export * from '@availity/mui-file-selector';
export * from '@availity/mui-form-utils';
export * from '@availity/mui-icon';
export * from '@availity/mui-layout';
Expand Down
5 changes: 0 additions & 5 deletions packages/event-tracker/jest.config.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
const global = require('../../jest.config.global');

const esModules = ['uuid'];

module.exports = {
...global,
displayName: 'event-tracker',
coverageDirectory: '../../coverage/event-tracker',
transformIgnorePatterns: [
`/node_modules/(?!${esModules})`
]
};
2 changes: 1 addition & 1 deletion packages/event-tracker/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,6 @@
"access": "public"
},
"dependencies": {
"@availity/analytics-core": "^4.1.2"
"@availity/analytics-core": "^5.0.3"
}
}
2 changes: 1 addition & 1 deletion packages/favorites/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
"publish:canary": "yarn npm publish --access public --tag canary"
},
"dependencies": {
"@availity/api-axios": "^9.0.0",
"@availity/api-axios": "^9.0.4",
"@availity/message-core": "^7.0.1",
"@tanstack/react-query": "^4.36.1"
},
Expand Down
2 changes: 1 addition & 1 deletion packages/feedback/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"access": "public"
},
"dependencies": {
"@availity/api-axios": "^9.0.0",
"@availity/api-axios": "^9.0.4",
"@availity/mui-button": "workspace:^",
"@availity/mui-form-utils": "workspace:^",
"@availity/mui-icon": "workspace:^",
Expand Down
Empty file.
61 changes: 61 additions & 0 deletions packages/file-selector/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# @availity/mui-file-selector

> Availity MUI File Selector component to be used with @availity/element design system.

[![Version](https://img.shields.io/npm/v/@availity/mui-file-selector.svg?style=for-the-badge)](https://www.npmjs.com/package/@availity/mui-file-selector)
[![NPM Downloads](https://img.shields.io/npm/dt/@availity/mui-file-selector.svg?style=for-the-badge)](https://www.npmjs.com/package/@availity/mui-file-selector)
[![Dependency Status](https://img.shields.io/librariesio/release/npm/@availity/mui-file-selector?style=for-the-badge)](https://github.com/Availity/element/blob/main/packages/mui-file-selector/package.json)

## Documentation

This package extends the MUI File Selector component: [MUI File Selector Docs](https://mui.com/components/file-selector/)

Live demo and documentation in our [Storybook](https://availity.github.io/element/?path=/docs/components-file-selector-introduction--docs)

Availity standards for design and usage can be found in the [Availity Design Guide](https://zeroheight.com/2e36e50c7)

## Installation

### Import Through @availity/element (Recommended)

#### NPM

```bash
npm install @availity/element
```

#### Yarn

```bash
yarn add @availity/element
```

### Direct Import

#### NPM

_This package has a few peer dependencies. Add `@mui/material` & `@emotion/react` to your project if not already installed._

```bash
npm install @availity/mui-file-selector
```

#### Yarn

```bash
yarn add @availity/mui-file-selector
```

### Usage

#### Import through @availity/element

```tsx
import { FileSelector } from '@availity/element';
```

#### Direct import

```tsx
import { FileSelector } from '@availity/mui-file-selector';
```
7 changes: 7 additions & 0 deletions packages/file-selector/introduction.stories.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { Markdown } from '@storybook/blocks';
import { Meta } from '@storybook/addon-docs';
import ReadMe from './README.md?raw';

<Meta title="Components/File Selector/Introduction" />

<Markdown>{ReadMe}</Markdown>
7 changes: 7 additions & 0 deletions packages/file-selector/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const global = require('../../jest.config.global');

module.exports = {
...global,
displayName: 'file-selector',
coverageDirectory: '../../coverage/file-selector',
};
65 changes: 65 additions & 0 deletions packages/file-selector/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
{
"name": "@availity/mui-file-selector",
"version": "0.0.0",
"description": "Availity MUI file-selector Component - part of the @availity/element design system",
"keywords": [
"react",
"typescript",
"availity",
"mui"
],
"homepage": "https://availity.github.io/element/?path=/docs/components-file-selector-introduction--docs",
"bugs": {
"url": "https://github.com/Availity/element/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/Availity/element.git",
"directory": "packages/file-selector"
},
"license": "MIT",
"author": "Availity Developers <[email protected]>",
"browser": "./dist/index.js",
"main": "./dist/index.js",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"scripts": {
"build": "tsup src/index.ts --format esm,cjs --dts",
"dev": "tsup src/index.ts --format esm,cjs --watch --dts",
"clean": "rm -rf dist",
"clean:nm": "rm -rf node_modules",
"publish": "yarn npm publish --tolerate-republish --access public",
"publish:canary": "yarn npm publish --access public --tag canary"
},
"dependencies": {
"@availity/api-axios": "^9.0.4",
"@availity/mui-button": "workspace:^",
"@availity/mui-divider": "workspace:^",
"@availity/mui-form-utils": "workspace:^",
"@availity/mui-icon": "workspace:^",
"@availity/mui-layout": "workspace:^",
"@availity/mui-list": "workspace:^",
"@availity/mui-progress": "workspace:^",
"@availity/mui-typography": "workspace:^",
"@availity/upload-core": "^6.1.1",
"@tanstack/react-query": "^4.36.1",
"react-dropzone": "^11.7.1",
"react-hook-form": "^7.51.3",
"uuid": "^9.0.1"
},
"devDependencies": {
"@mui/material": "^5.15.15",
"@types/tus-js-client": "^1.8.0",
"react": "18.2.0",
"react-dom": "18.2.0",
"tsup": "^8.0.2",
"typescript": "^5.4.5"
},
"peerDependencies": {
"@mui/material": "^5.11.9",
"react": ">=16.3.0"
},
"publishConfig": {
"access": "public"
}
}
41 changes: 41 additions & 0 deletions packages/file-selector/project.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"name": "mui-file-selector",
"$schema": "../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "packages/file-selector/src",
"projectType": "library",
"tags": [],
"targets": {
"lint": {
"executor": "@nx/eslint:lint",
"options": {
"eslintConfig": ".eslintrc.json",
"silent": false,
"fix": false,
"cache": true,
"cacheLocation": "./node_modules/.cache/file-selector/.eslintcache",
"maxWarnings": -1,
"quiet": false,
"noEslintrc": false,
"hasTypeAwareRules": true,
"cacheStrategy": "metadata"
}
},
"test": {
"executor": "@nx/jest:jest",
"outputs": ["{workspaceRoot}/coverage/file-selector"],
"options": {
"jestConfig": "packages/file-selector/jest.config.js"
}
},
"version": {
"executor": "@jscutlery/semver:version",
"options": {
"preset": "conventional",
"commitMessageFormat": "chore({projectName}): release version ${version} [skip ci]",
"tagPrefix": "@availity/{projectName}@",
"trackDeps": true,
"skipCommitTypes": ["docs"]
}
}
}
}
1 change: 1 addition & 0 deletions packages/file-selector/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './lib/UploadProgressBar';
28 changes: 28 additions & 0 deletions packages/file-selector/src/lib/Dropzone.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { ReactNode } from 'react';
import { render, screen } from '@testing-library/react';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { useForm, FormProvider } from 'react-hook-form';

import { Dropzone } from './Dropzone';

const TestForm = ({ children }: { children: ReactNode }) => {
const methods = useForm();

return <FormProvider {...methods}>{children}</FormProvider>;
};

describe('Dropzone', () => {
test('should render successfully', () => {
const client = new QueryClient();

render(
<QueryClientProvider client={client}>
<TestForm>
<Dropzone name="test" bucketId="test" customerId="123" clientId="test" maxSize={1000} />
</TestForm>
</QueryClientProvider>
);

expect(screen.getByText('Drag and Drop Files Here')).toBeTruthy();
});
});
Loading
Loading