Update import paths

This commit is contained in:
Nate Kelley 2025-07-03 23:56:31 -06:00
parent 82fc198f57
commit 533b4dcf77
No known key found for this signature in database
GPG Key ID: FD90372AB8D98B4F
10 changed files with 57 additions and 51 deletions

View File

@ -85,7 +85,7 @@
"dom-to-image": "^2.6.0",
"email-validator": "^2.0.4",
"font-color-contrast": "^11.1.0",
"framer-motion": "^12.20.1",
"framer-motion": "^12.23.0",
"hono": "catalog:",
"html-react-parser": "^5.2.5",
"intersection-observer": "^0.12.2",
@ -134,7 +134,7 @@
"devDependencies": {
"@chromatic-com/storybook": "^3.2.6",
"@next/bundle-analyzer": "^15.3.5",
"@playwright/test": "^1.53.2",
"@playwright/test": "1.53.1",
"@storybook/addon-controls": "^8.6.12",
"@storybook/addon-essentials": "^8.6.14",
"@storybook/addon-interactions": "^8.6.14",

View File

@ -5,7 +5,7 @@ import type {
BusterUserResponse,
OrganizationUser
} from '@/api/asset_interfaces/users';
import { BASE_URL } from '@/api/buster_rest/config';
import { BASE_URL } from '../config';
import { serverFetch } from '../../createServerInstance';
import { mainApi } from '../instances';

View File

@ -1,5 +1,5 @@
import { redirect } from 'next/navigation';
import { getMyUserInfo_server } from '@/api/buster_rest';
import { getMyUserInfo_server } from '@/api/buster_rest/users/requests';
import { ResetPasswordForm } from '@/components/features/auth/ResetPasswordForm';
import { getSupabaseUserContext } from '@/lib/supabase';
import { resetPassword } from '@/lib/supabase/resetPassword';
@ -8,7 +8,7 @@ import { BusterRoutes, createBusterRoute } from '@/routes/busterRoutes';
export default async function ResetPassword() {
const { user, accessToken } = await getSupabaseUserContext();
if (!user?.id) {
if (!user?.id || !accessToken) {
return redirect(
createBusterRoute({
route: BusterRoutes.AUTH_LOGIN

View File

@ -1,6 +1,6 @@
import { validate } from 'email-validator';
import React from 'react';
import type { ShareAssetType, ShareConfig, ShareRole } from '@buster/server-shared/share';
import { isValidEmail } from '@/lib/email';
import {
useShareCollection,
useUnshareCollection,
@ -84,12 +84,12 @@ const ShareMenuContentShare: React.FC<ShareMenuContentBodyProps> = React.memo(
const [inputValue, setInputValue] = React.useState<string>('');
const [defaultPermissionLevel, setDefaultPermissionLevel] =
React.useState<ShareRole>('canView');
const disableSubmit = !inputHasText(inputValue) || !validate(inputValue);
const disableSubmit = !inputHasText(inputValue) || !isValidEmail(inputValue);
const hasIndividualPermissions = !!individual_permissions?.length;
const onSubmitNewEmail = useMemoizedFn(async () => {
const isValidEmail = validate(inputValue);
if (!isValidEmail) {
const emailIsValid = isValidEmail(inputValue);
if (!emailIsValid) {
openErrorMessage('Invalid email address');
return;
}

View File

@ -1,8 +1,10 @@
import { validate } from 'email-validator';
'use client';
import type React from 'react';
import { useEffect, useMemo } from 'react';
import { CircleCheck, CircleXmark } from '@/components/ui/icons';
import { Text } from '@/components/ui/typography';
import { isValidEmail } from '@/lib/email';
const PasswordCheckItem: React.FC<{
passwordGood: boolean;
@ -53,7 +55,7 @@ export const PolicyCheck: React.FC<{
const items = [
{
text: 'Email is valid',
check: validate(email)
check: isValidEmail(email)
},
{
text: 'Contains a number',

View File

@ -9,7 +9,8 @@ import { Input } from '@/components/ui/inputs';
import { Text, Title } from '@/components/ui/typography';
import { useBusterNotifications } from '@/context/BusterNotifications';
import { useMemoizedFn } from '@/hooks';
import { isValidEmail, timeout } from '@/lib';
import { isValidEmail } from '@/lib/email';
import { timeout } from '@/lib/timeout';
import { cn } from '@/lib/classMerge';
import { BusterRoutes, createBusterRoute } from '@/routes';

View File

@ -1,4 +1,3 @@
import { validate } from 'email-validator';
import uniq from 'lodash/uniq';
import React, { useMemo } from 'react';
import { useInviteUser } from '@/api/buster_rest/users';
@ -7,6 +6,7 @@ import { AppModal } from '@/components/ui/modal';
import { useBusterNotifications } from '@/context/BusterNotifications';
import { useMemoizedFn } from '@/hooks';
import { timeout } from '@/lib';
import { isValidEmail } from '@/lib/email';
export const InvitePeopleModal: React.FC<{
open: boolean;
@ -18,7 +18,9 @@ export const InvitePeopleModal: React.FC<{
const { openErrorMessage, openSuccessMessage } = useBusterNotifications();
const handleInvite = useMemoizedFn(async () => {
const allEmails = uniq([...emails, inputText].filter((email) => !!email && validate(email)));
const allEmails = uniq(
[...emails, inputText].filter((email) => !!email && isValidEmail(email))
);
try {
await inviteUsers({ emails: allEmails });
onClose();
@ -40,7 +42,7 @@ export const InvitePeopleModal: React.FC<{
}, []);
const isInputTextValidEmail = useMemo(() => {
return validate(inputText);
return isValidEmail(inputText);
}, [inputText]);
const memoizedFooter = useMemo(() => {
@ -64,7 +66,7 @@ export const InvitePeopleModal: React.FC<{
onTagAdd={(v) => {
const arrayedTags = Array.isArray(v) ? v : [v];
const hadMultipleTags = arrayedTags.length > 1;
const validTags = arrayedTags.filter((tag) => validate(tag));
const validTags = arrayedTags.filter((tag) => isValidEmail(tag));
setEmails([...emails, ...validTags]);

View File

@ -28,8 +28,9 @@ export const isPersonalEmail = (email: string) => {
return isValidEmail(email) && personalEmailDomains.some((domain) => email.includes(domain));
};
const EMAIL_REGEX =
/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
export const isValidEmail = (email: string) => {
const re =
/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(String(email).toLowerCase());
return EMAIL_REGEX.test(String(email).toLowerCase());
};

View File

@ -2,10 +2,10 @@ import type { BusterAppRoutes } from './busterAppRoutes';
import { BusterRoutes, type BusterRoutesWithArgsRoute } from './busterRoutes';
export const createBusterRoute = ({ route, ...args }: BusterRoutesWithArgsRoute) => {
if (!route) return '';
if (!args) return route;
// Split the route into base path and query template if it exists
const [basePath, queryTemplate] = (route as string).split('?');
// Replace path parameters

View File

@ -226,7 +226,7 @@ importers:
version: 4.7.0(monaco-editor@0.52.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@posthog/nextjs-config':
specifier: ^1.0.0
version: 1.0.0(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2))
version: 1.0.0(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2))
'@radix-ui/react-avatar':
specifier: ^1.1.10
version: 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -363,8 +363,8 @@ importers:
specifier: ^11.1.0
version: 11.1.0
framer-motion:
specifier: ^12.20.1
version: 12.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: ^12.23.0
version: 12.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
hono:
specifier: 'catalog:'
version: 4.8.3
@ -403,7 +403,7 @@ importers:
version: 1.2.0
next:
specifier: 14.2.30
version: 14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)
version: 14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)
next-themes:
specifier: ^0.4.6
version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -505,8 +505,8 @@ importers:
specifier: ^15.3.5
version: 15.3.5
'@playwright/test':
specifier: ^1.53.2
version: 1.53.2
specifier: 1.53.1
version: 1.53.1
'@storybook/addon-controls':
specifier: ^8.6.12
version: 8.6.14(storybook@8.6.14(prettier@3.6.2))
@ -521,7 +521,7 @@ importers:
version: 8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(prettier@3.6.2))
'@storybook/nextjs':
specifier: ^8.6.12
version: 8.6.14(esbuild@0.25.5)(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)(storybook@8.6.14(prettier@3.6.2))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))
version: 8.6.14(esbuild@0.25.5)(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)(storybook@8.6.14(prettier@3.6.2))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))
'@storybook/react':
specifier: ^8.6.12
version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.6.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(prettier@3.6.2))(typescript@5.8.3)
@ -3506,8 +3506,8 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
'@playwright/test@1.53.2':
resolution: {integrity: sha512-tEB2U5z74ebBeyfGNZ3Jfg29AnW+5HlWhvHtb/Mqco9pFdZU1ZLNdVb2UtB5CvmiilNr2ZfVH/qMmAROG/XTzw==}
'@playwright/test@1.53.1':
resolution: {integrity: sha512-Z4c23LHV0muZ8hfv4jw6HngPJkbbtZxTkxPNIg7cJcTc9C28N/p2q7g3JZS2SiKBBHJ3uM1dgDye66bB7LEk5w==}
engines: {node: '>=18'}
hasBin: true
@ -7497,8 +7497,8 @@ packages:
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
engines: {node: '>= 0.6'}
framer-motion@12.20.1:
resolution: {integrity: sha512-NW2t2GHQcNvLHq18JyNVY15VKrwru+nkNyhLdqf4MbxbGhxZcSDi68iNcAy6O1nG0yYAQJbLioBIH1Kmg8Xr1g==}
framer-motion@12.23.0:
resolution: {integrity: sha512-xf6NxTGAyf7zR4r2KlnhFmsRfKIbjqeBupEDBAaEtVIBJX96sAon00kMlsKButSIRwPSHjbRrAPnYdJJ9kyhbA==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@ -8945,8 +8945,8 @@ packages:
peerDependencies:
monaco-editor: '>=0.36'
motion-dom@12.20.1:
resolution: {integrity: sha512-XyveLJ9dmQTmaEsP9RlcuoNFxWlRIGdasdPJBB4aOwPr8bRcJdhltudAbiEjRQBmsGD30sjJdaEjhkHsAHapLQ==}
motion-dom@12.22.0:
resolution: {integrity: sha512-ooH7+/BPw9gOsL9VtPhEJHE2m4ltnhMlcGMhEqA0YGNhKof7jdaszvsyThXI6LVIKshJUZ9/CP6HNqQhJfV7kw==}
motion-utils@12.19.0:
resolution: {integrity: sha512-BuFTHINYmV07pdWs6lj6aI63vr2N4dg0vR+td0rtrdpWOhBzIkEklZyLcvKBoEtwSqx8Jg06vUB5RS0xDiUybw==}
@ -9477,13 +9477,13 @@ packages:
pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
playwright-core@1.53.2:
resolution: {integrity: sha512-ox/OytMy+2w1jcYEYlOo1Hhp8hZkLCximMTUTMBXjGUA1KoFfiSZ+DU+3a739jsPY0yoKH2TFy9S2fsJas8yAw==}
playwright-core@1.53.1:
resolution: {integrity: sha512-Z46Oq7tLAyT0lGoFx4DOuB1IA9D1TPj0QkYxpPVUnGDqHHvDpCftu1J2hM2PiWsNMoZh8+LQaarAWcDfPBc6zg==}
engines: {node: '>=18'}
hasBin: true
playwright@1.53.2:
resolution: {integrity: sha512-6K/qQxVFuVQhRQhFsVZ9fGeatxirtrpPgxzBYWyZLEXJzqYwuL4fuNmfOfD5et1tJE4GScKyPNeLhZeRwuTU3A==}
playwright@1.53.1:
resolution: {integrity: sha512-LJ13YLr/ocweuwxyGf1XNFWIU4M2zUSo149Qbp+A4cpwDjsxRPj7k6H25LBrEHiEwxvRbD8HdwvQmRMSvquhYw==}
engines: {node: '>=18'}
hasBin: true
@ -15127,9 +15127,9 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
'@playwright/test@1.53.2':
'@playwright/test@1.53.1':
dependencies:
playwright: 1.53.2
playwright: 1.53.1
'@pmmmwh/react-refresh-webpack-plugin@0.5.17(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))':
dependencies:
@ -15158,10 +15158,10 @@ snapshots:
transitivePeerDependencies:
- debug
'@posthog/nextjs-config@1.0.0(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2))':
'@posthog/nextjs-config@1.0.0(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2))':
dependencies:
'@posthog/cli': 0.3.1
next: 14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)
next: 14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)
transitivePeerDependencies:
- debug
@ -16373,7 +16373,7 @@ snapshots:
dependencies:
storybook: 8.6.14(prettier@3.6.2)
'@storybook/nextjs@8.6.14(esbuild@0.25.5)(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)(storybook@8.6.14(prettier@3.6.2))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))':
'@storybook/nextjs@8.6.14(esbuild@0.25.5)(next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)(storybook@8.6.14(prettier@3.6.2))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))':
dependencies:
'@babel/core': 7.27.7
'@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.7)
@ -16399,7 +16399,7 @@ snapshots:
find-up: 5.0.0
image-size: 1.2.1
loader-utils: 3.3.1
next: 14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)
next: 14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2)
node-polyfill-webpack-plugin: 2.0.1(webpack@5.99.9(esbuild@0.25.5))
pnp-webpack-plugin: 1.7.0(typescript@5.8.3)
postcss: 8.5.6
@ -19783,9 +19783,9 @@ snapshots:
forwarded@0.2.0: {}
framer-motion@12.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
framer-motion@12.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
motion-dom: 12.20.1
motion-dom: 12.22.0
motion-utils: 12.19.0
tslib: 2.8.1
optionalDependencies:
@ -21475,7 +21475,7 @@ snapshots:
vscode-uri: 3.1.0
yaml: 2.8.0
motion-dom@12.20.1:
motion-dom@12.22.0:
dependencies:
motion-utils: 12.19.0
@ -21577,7 +21577,7 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2):
next@14.2.30(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.2):
dependencies:
'@next/env': 14.2.30
'@swc/helpers': 0.5.5
@ -21599,7 +21599,7 @@ snapshots:
'@next/swc-win32-ia32-msvc': 14.2.30
'@next/swc-win32-x64-msvc': 14.2.30
'@opentelemetry/api': 1.9.0
'@playwright/test': 1.53.2
'@playwright/test': 1.53.1
sass: 1.89.2
transitivePeerDependencies:
- '@babel/core'
@ -22097,11 +22097,11 @@ snapshots:
mlly: 1.7.4
pathe: 2.0.3
playwright-core@1.53.2: {}
playwright-core@1.53.1: {}
playwright@1.53.2:
playwright@1.53.1:
dependencies:
playwright-core: 1.53.2
playwright-core: 1.53.1
optionalDependencies:
fsevents: 2.3.2