Skip to content

Commit 65b0b40

Browse files
committed
use prefix path. fix more links
1 parent 2d60d25 commit 65b0b40

File tree

13 files changed

+203
-73
lines changed

13 files changed

+203
-73
lines changed

apps/web/app/(app)/[emailAccountId]/automation/ProcessResultDisplay.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,16 @@ import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
88
import { HoverCard } from "@/components/HoverCard";
99
import { Badge } from "@/components/Badge";
1010
import { isAIRule } from "@/utils/condition";
11+
import { prefixPath } from "@/utils/path";
1112

1213
export function ProcessResultDisplay({
1314
result,
1415
prefix,
16+
emailAccountId,
1517
}: {
1618
result: RunRulesResult;
1719
prefix?: string;
20+
emailAccountId: string;
1821
}) {
1922
if (!result) return null;
2023

@@ -84,7 +87,10 @@ export function ProcessResultDisplay({
8487
<AlertTitle className="flex items-center justify-between">
8588
Matched rule "{result.rule.name}"
8689
<Link
87-
href={`/automation/rule/${result.rule.id}`}
90+
href={prefixPath(
91+
emailAccountId,
92+
`/automation/rule/${result.rule.id}`,
93+
)}
8894
target="_blank"
8995
className="ml-1.5"
9096
>

apps/web/app/(app)/[emailAccountId]/automation/ProcessRules.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ export function ProcessRulesContent({ testMode }: { testMode: boolean }) {
222222
result={results[message.id]}
223223
onRun={(rerun) => onRun(message, rerun)}
224224
testMode={testMode}
225+
emailAccountId={emailAccountId}
225226
/>
226227
))}
227228
</TableBody>
@@ -252,13 +253,15 @@ function ProcessRulesRow({
252253
result,
253254
onRun,
254255
testMode,
256+
emailAccountId,
255257
}: {
256258
message: Message;
257259
userEmail: string;
258260
isRunning: boolean;
259261
result: RunRulesResult;
260262
onRun: (rerun?: boolean) => void;
261263
testMode: boolean;
264+
emailAccountId: string;
262265
}) {
263266
return (
264267
<TableRow
@@ -284,7 +287,10 @@ function ProcessRulesRow({
284287
{result.existing && (
285288
<Badge color="yellow">Already processed</Badge>
286289
)}
287-
<ProcessResultDisplay result={result} />
290+
<ProcessResultDisplay
291+
result={result}
292+
emailAccountId={emailAccountId}
293+
/>
288294
</div>
289295
<ReportMistake
290296
result={result}

apps/web/app/(app)/[emailAccountId]/automation/ReportMistake.tsx

Lines changed: 75 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import { CategorySelect } from "@/components/CategorySelect";
6262
import { useModal } from "@/hooks/useModal";
6363
import { ConditionType } from "@/utils/config";
6464
import { useAccount } from "@/providers/EmailAccountProvider";
65+
import { prefixPath } from "@/utils/path";
6566

6667
type ReportMistakeView = "select-expected-rule" | "ai-fix" | "manual-fix";
6768

@@ -220,6 +221,7 @@ function Content({
220221
return (
221222
<RuleMismatch
222223
result={result}
224+
emailAccountId={emailAccountId}
223225
onSelectExpectedRuleId={onSelectExpectedRule}
224226
rules={rules}
225227
/>
@@ -234,6 +236,7 @@ function Content({
234236
return (
235237
<ThreadSettingsMismatchMessage
236238
expectedRuleId={expectedRule.id}
239+
emailAccountId={emailAccountId}
237240
onBack={onBack}
238241
/>
239242
);
@@ -273,6 +276,7 @@ function Content({
273276
if (isExpectedStaticRule || isActualStaticRule) {
274277
return (
275278
<StaticMismatch
279+
emailAccountId={emailAccountId}
276280
ruleId={expectedRule?.id || actualRule?.id!}
277281
isExpectedStaticRule={isExpectedStaticRule}
278282
onBack={onBack}
@@ -298,6 +302,7 @@ function Content({
298302
if (view === "ai-fix") {
299303
return (
300304
<AIFixView
305+
emailAccountId={emailAccountId}
301306
loadingAiFix={isExecuting}
302307
fixedInstructions={fixedInstructions ?? null}
303308
fixedInstructionsRule={fixedInstructionsRule ?? null}
@@ -318,6 +323,7 @@ function Content({
318323
result={result}
319324
isTest={isTest}
320325
onBack={onBack}
326+
emailAccountId={emailAccountId}
321327
/>
322328
);
323329
}
@@ -327,6 +333,7 @@ function Content({
327333
}
328334

329335
function AIFixView({
336+
emailAccountId,
330337
loadingAiFix,
331338
fixedInstructions,
332339
fixedInstructionsRule,
@@ -335,6 +342,7 @@ function AIFixView({
335342
onBack,
336343
onReject,
337344
}: {
345+
emailAccountId: string;
338346
loadingAiFix: boolean;
339347
fixedInstructions: {
340348
ruleId: string;
@@ -359,7 +367,10 @@ function AIFixView({
359367
<div className="space-y-2">
360368
{fixedInstructionsRule?.instructions ? (
361369
<div className="space-y-2">
362-
<ProcessResultDisplay result={{ rule: fixedInstructionsRule }} />
370+
<ProcessResultDisplay
371+
result={{ rule: fixedInstructionsRule }}
372+
emailAccountId={emailAccountId}
373+
/>
363374
<Instructions
364375
label="Original:"
365376
instructions={fixedInstructionsRule?.instructions}
@@ -388,18 +399,23 @@ function AIFixView({
388399
function RuleMismatch({
389400
result,
390401
rules,
402+
emailAccountId,
391403
onSelectExpectedRuleId,
392404
}: {
393405
result: RunRulesResult | null;
394406
rules: RulesResponse;
407+
emailAccountId: string;
395408
onSelectExpectedRuleId: (ruleId: string | null) => void;
396409
}) {
397410
return (
398411
<div>
399412
<Label name="matchedRule" label="Matched:" />
400413
<div className="mt-1">
401414
{result ? (
402-
<ProcessResultDisplay result={result} />
415+
<ProcessResultDisplay
416+
result={result}
417+
emailAccountId={emailAccountId}
418+
/>
403419
) : (
404420
<p>No rule matched</p>
405421
)}
@@ -420,9 +436,11 @@ function RuleMismatch({
420436

421437
function ThreadSettingsMismatchMessage({
422438
expectedRuleId,
439+
emailAccountId,
423440
onBack,
424441
}: {
425442
expectedRuleId: string;
443+
emailAccountId: string;
426444
onBack: () => void;
427445
}) {
428446
return (
@@ -433,7 +451,10 @@ function ThreadSettingsMismatchMessage({
433451
</SectionDescription>
434452
<div className="mt-2 flex gap-2">
435453
<BackButton onBack={onBack} />
436-
<EditRuleButton ruleId={expectedRuleId} />
454+
<EditRuleButton
455+
ruleId={expectedRuleId}
456+
emailAccountId={emailAccountId}
457+
/>
437458
</div>
438459
</div>
439460
);
@@ -506,7 +527,7 @@ function GroupMismatchAdd({
506527

507528
<div className="mt-2 flex gap-2">
508529
<BackButton onBack={onBack} />
509-
<EditRuleButton ruleId={ruleId} />
530+
<EditRuleButton ruleId={ruleId} emailAccountId={emailAccountId} />
510531
</div>
511532
</div>
512533
);
@@ -575,7 +596,7 @@ function GroupMismatchRemove({
575596

576597
<div className="mt-2 flex gap-2">
577598
<BackButton onBack={onBack} />
578-
<EditRuleButton ruleId={ruleId} />
599+
<EditRuleButton ruleId={ruleId} emailAccountId={emailAccountId} />
579600
</div>
580601
</div>
581602
);
@@ -629,18 +650,20 @@ function CategoryMismatch({
629650

630651
<div className="mt-2 flex gap-2">
631652
<BackButton onBack={onBack} />
632-
<EditRuleButton ruleId={ruleId} />
653+
<EditRuleButton ruleId={ruleId} emailAccountId={emailAccountId} />
633654
</div>
634655
</div>
635656
);
636657
}
637658

638659
// TODO: Could auto fix the static rule for the user
639660
function StaticMismatch({
661+
emailAccountId,
640662
ruleId,
641663
isExpectedStaticRule,
642664
onBack,
643665
}: {
666+
emailAccountId: string;
644667
ruleId: string;
645668
isExpectedStaticRule: boolean;
646669
onBack: () => void;
@@ -656,7 +679,7 @@ function StaticMismatch({
656679
</SectionDescription>
657680
<div className="mt-2 flex gap-2">
658681
<BackButton onBack={onBack} />
659-
<EditRuleButton ruleId={ruleId} />
682+
<EditRuleButton ruleId={ruleId} emailAccountId={emailAccountId} />
660683
</div>
661684
</div>
662685
);
@@ -669,24 +692,35 @@ function ManualFixView({
669692
result,
670693
onBack,
671694
isTest,
695+
emailAccountId,
672696
}: {
673697
actualRule?: Rule | null;
674698
expectedRule?: Rule | null;
675699
message: ParsedMessage;
676700
result: RunRulesResult | null;
677701
onBack: () => void;
678702
isTest: boolean;
703+
emailAccountId: string;
679704
}) {
680705
return (
681706
<>
682707
<>
683-
{result && <ProcessResultDisplay result={result} prefix="Matched: " />}
708+
{result && (
709+
<ProcessResultDisplay
710+
result={result}
711+
prefix="Matched: "
712+
emailAccountId={emailAccountId}
713+
/>
714+
)}
684715
{actualRule && (
685716
<>
686717
{isAIRule(actualRule) ? (
687718
<RuleForm rule={actualRule} />
688719
) : (
689-
<EditRuleButton ruleId={actualRule.id} />
720+
<EditRuleButton
721+
ruleId={actualRule.id}
722+
emailAccountId={emailAccountId}
723+
/>
690724
)}
691725
<Separator />
692726
</>
@@ -698,7 +732,10 @@ function ManualFixView({
698732
{isAIRule(expectedRule) ? (
699733
<RuleForm rule={expectedRule} />
700734
) : (
701-
<EditRuleButton ruleId={expectedRule.id} />
735+
<EditRuleButton
736+
ruleId={expectedRule.id}
737+
emailAccountId={emailAccountId}
738+
/>
702739
)}
703740
<Separator />
704741
</>
@@ -976,17 +1013,20 @@ function RerunButton({
9761013
const [result, setResult] = useState<RunRulesResult>();
9771014

9781015
const { emailAccountId } = useAccount();
979-
const { execute, isExecuting } = useAction(runRulesAction.bind(null, emailAccountId), {
980-
onSuccess: (result) => {
981-
setResult(result?.data);
982-
},
983-
onError: (error) => {
984-
toastError({
985-
title: "There was an error testing the email",
986-
description: error.error.serverError ?? "An error occurred",
987-
});
1016+
const { execute, isExecuting } = useAction(
1017+
runRulesAction.bind(null, emailAccountId),
1018+
{
1019+
onSuccess: (result) => {
1020+
setResult(result?.data);
1021+
},
1022+
onError: (error) => {
1023+
toastError({
1024+
title: "There was an error testing the email",
1025+
description: error.error.serverError ?? "An error occurred",
1026+
});
1027+
},
9881028
},
989-
});
1029+
);
9901030

9911031
return (
9921032
<>
@@ -1007,7 +1047,10 @@ function RerunButton({
10071047
{result && (
10081048
<div className="mt-2 flex items-center gap-2">
10091049
<SectionDescription>Result:</SectionDescription>
1010-
<ProcessResultDisplay result={result} />
1050+
<ProcessResultDisplay
1051+
result={result}
1052+
emailAccountId={emailAccountId}
1053+
/>
10111054
</div>
10121055
)}
10131056
</>
@@ -1023,10 +1066,19 @@ function BackButton({ onBack }: { onBack: () => void }) {
10231066
);
10241067
}
10251068

1026-
function EditRuleButton({ ruleId }: { ruleId: string }) {
1069+
function EditRuleButton({
1070+
ruleId,
1071+
emailAccountId,
1072+
}: {
1073+
ruleId: string;
1074+
emailAccountId: string;
1075+
}) {
10271076
return (
10281077
<Button variant="outline" size="sm" asChild>
1029-
<Link href={`/automation/rule/${ruleId}`} target="_blank">
1078+
<Link
1079+
href={prefixPath(emailAccountId, `/automation/rule/${ruleId}`)}
1080+
target="_blank"
1081+
>
10301082
<ExternalLinkIcon className="mr-2 size-4" />
10311083
Edit Rule
10321084
</Link>

apps/web/app/(app)/[emailAccountId]/automation/RuleForm.tsx

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -737,22 +737,9 @@ export function RuleForm({ rule }: { rule: CreateRuleBody & { id?: string } }) {
737737

738738
<div className="flex justify-end space-x-2 py-6">
739739
{rule.id ? (
740-
<>
741-
{/* {!isAIRule(rule) && (
742-
<Button variant="outline" asChild>
743-
<Link href={`/automation/rule/${rule.id}/examples`}>
744-
View Examples
745-
</Link>
746-
</Button>
747-
)} */}
748-
<Button
749-
type="submit"
750-
disabled={isSubmitting}
751-
loading={isSubmitting}
752-
>
753-
Save
754-
</Button>
755-
</>
740+
<Button type="submit" disabled={isSubmitting} loading={isSubmitting}>
741+
Save
742+
</Button>
756743
) : (
757744
<Button type="submit" disabled={isSubmitting} loading={isSubmitting}>
758745
Create

0 commit comments

Comments
 (0)