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
133 changes: 133 additions & 0 deletions example/src/ReviewOnboardingStep.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ export const ReviewOnboardingStep = ({
OnboardingInvite,
BackButton,
ReviewStep: ReviewStepCreditRisk,
PreOnboardingRequirements,
} = components;

return (
Expand Down Expand Up @@ -279,6 +280,138 @@ export const ReviewOnboardingStep = ({
>
Edit Benefits
</button>

<h2 className='title'>Pre-Onboarding Requirements</h2>
{PreOnboardingRequirements && (
<PreOnboardingRequirements
render={({
requirements,
isLoadingRequirements,
documentPreview,
onCreateDocument,
onSignDocument,
isCreatingDocument,
isSigning,
}: {
requirements:
| Array<{
id: string;
title: string;
description: string;
status: string;
required: boolean;
}>
| undefined;
isLoadingRequirements: boolean;
documentPreview:
| {
id: string;
employment_id: string;
document_type: string;
status: string;
pdf_url?: string;
created_at: string;
}
| undefined;
onCreateDocument: () => Promise<unknown>;
onSignDocument: (signature: string) => Promise<unknown>;
isCreatingDocument: boolean;
isSigning: boolean;
}) => (
<div
style={{
padding: '20px',
background: '#f5f5f5',
borderRadius: '8px',
marginBottom: '20px',
}}
>
{isLoadingRequirements ? (
<p>Loading requirements...</p>
) : (
<>
<h3>Requirements List</h3>
{requirements?.map(
(req: {
id: string;
title: string;
description: string;
status: string;
}) => (
<div
key={req.id}
style={{
marginBottom: '10px',
padding: '10px',
background: 'white',
borderRadius: '4px',
}}
>
<strong>{req.title}</strong>
<p>{req.description}</p>
<span
style={{
color:
req.status === 'pending' ? 'orange' : 'green',
}}
>
Status: {req.status}
</span>
</div>
),
)}

{!documentPreview && (
<button
onClick={onCreateDocument}
disabled={isCreatingDocument}
style={{
marginTop: '10px',
padding: '10px 20px',
cursor: isCreatingDocument ? 'not-allowed' : 'pointer',
}}
>
{isCreatingDocument ? 'Creating...' : 'Create Document'}
</button>
)}

{documentPreview && (
<div style={{ marginTop: '20px' }}>
<h4>Document Preview</h4>
<p>Document ID: {documentPreview.id}</p>
<p>Status: {documentPreview.status}</p>
{documentPreview.pdf_url && (
<p>
PDF URL:{' '}
<a
href={documentPreview.pdf_url}
target='_blank'
rel='noopener noreferrer'
>
{documentPreview.pdf_url}
</a>
</p>
)}
<button
onClick={() => onSignDocument('John Doe Signature')}
disabled={isSigning}
style={{
marginTop: '10px',
padding: '10px 20px',
cursor: isSigning ? 'not-allowed' : 'pointer',
}}
>
{isSigning ? 'Signing...' : 'Sign Document'}
</button>
</div>
)}
</>
)}
</div>
)}
/>
)}

<h2 className='title'>Review</h2>
<ReviewStepCreditRisk
render={({
Expand Down
8 changes: 8 additions & 0 deletions openapi-ts.config.local.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { defineConfig, defaultPlugins } from '@hey-api/openapi-ts';

export default defineConfig({
// Local gateway with new endpoints
input: 'http://localhost:4000/api/eor/openapi',
output: 'src/client',
plugins: defaultPlugins,
});
2 changes: 2 additions & 0 deletions openapi-ts.config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { defineConfig, defaultPlugins } from '@hey-api/openapi-ts';

export default defineConfig({
// Production gateway - use npm run openapi-ts for production generation
// For local gateway with new endpoints, use npm run openapi-ts:local instead
input: 'https://gateway.remote.com/v1/docs/openapi.json',
output: 'src/client',
plugins: defaultPlugins,
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"lint:workflows:fix": "zizmor --fix .github/workflows/",
"format": "oxfmt",
"openapi-ts": "openapi-ts && npm run format",
"openapi-ts:local": "openapi-ts -f openapi-ts.config.local.ts && tsx scripts/cleanup-local-openapi.ts && npm run format",
"test": "vitest",
"test:coverage": "vitest --coverage",
"coverage:extract": "tsx scripts/extract-coverage.ts",
Expand Down
50 changes: 50 additions & 0 deletions scripts/cleanup-local-openapi.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import { readFileSync, writeFileSync } from 'fs';
import { resolve } from 'path';

/**
* Removes /api/eor prefix from generated OpenAPI client files
* This is needed when generating from local OpenAPI spec that includes the prefix
*/
function cleanupApiEorPrefix() {
const files = [
resolve(process.cwd(), 'src/client/sdk.gen.ts'),
resolve(process.cwd(), 'src/client/types.gen.ts'),
];

let totalReplacements = 0;

for (const filePath of files) {
try {
let content = readFileSync(filePath, 'utf-8');
const originalContent = content;

// Replace /api/eor/v1/ with /v1/
content = content.replace(/url: '\/api\/eor\/v1\//g, "url: '/v1/");

// Replace /api/eor/v2/ with /v2/
content = content.replace(/url: '\/api\/eor\/v2\//g, "url: '/v2/");

if (content !== originalContent) {
writeFileSync(filePath, content, 'utf-8');
const fileName = filePath.split('/').pop();
const replacements = (originalContent.match(/\/api\/eor\//g) || [])
.length;
console.log(`✓ Cleaned ${replacements} URLs in ${fileName}`);
totalReplacements += replacements;
}
} catch (error) {
console.error(`Error processing ${filePath}:`, error);
process.exit(1);
}
}

if (totalReplacements > 0) {
console.log(
`\n✓ Successfully removed /api/eor prefix from ${totalReplacements} URLs`,
);
} else {
console.log('\n✓ No /api/eor prefixes found');
}
}

cleanupApiEorPrefix();
4 changes: 1 addition & 3 deletions src/client/client.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,4 @@ export type CreateClientConfig<T extends ClientOptions = ClientOptions2> = (
override?: Config<ClientOptions & T>,
) => Config<Required<ClientOptions> & T>;

export const client = createClient(
createConfig<ClientOptions2>({ baseUrl: 'https://gateway.remote.com/' }),
);
export const client = createClient(createConfig<ClientOptions2>());
Loading
Loading