11import { useEffect , useRef , useState } from "react" ;
22import { Box , Text , useInput } from "ink" ;
3+ import { Option } from "effect" ;
34import figures from "figures" ;
45import type { ChangesFor , SavedFlow } from "@expect/shared/models" ;
5- import { trackEvent } from "../../utils/session-analytics" ;
6- import { useColors } from "../theme-context" ;
6+ import { Clickable } from "../ui/clickable" ;
77import { Logo } from "../ui/logo" ;
88import { Spinner } from "../ui/spinner" ;
9- import { Clickable } from "../ui/clickable" ;
9+ import { useColors } from "../theme-context" ;
10+ import { trackEvent } from "../../utils/session-analytics" ;
1011import {
1112 useNavigationStore ,
1213 Screen ,
1314 screenForTestingOrPortPicker ,
1415} from "../../stores/use-navigation" ;
1516import { useProjectPreferencesStore } from "../../stores/use-project-preferences" ;
16- import { useInstalledBrowsers , type DetectedBrowser } from "../../hooks/use-installed-browsers" ;
17+ import { useInstalledBrowsers } from "../../hooks/use-installed-browsers" ;
18+
1719
1820interface CookieSyncConfirmScreenProps {
1921 changesFor ?: ChangesFor ;
@@ -28,51 +30,52 @@ export const CookieSyncConfirmScreen = ({
2830} : CookieSyncConfirmScreenProps ) => {
2931 const COLORS = useColors ( ) ;
3032 const setScreen = useNavigationStore ( ( state ) => state . setScreen ) ;
31- const setCookieBrowserKeys = useProjectPreferencesStore ( ( state ) => state . setCookieBrowserKeys ) ;
32- const { data : browsers , isLoading } = useInstalledBrowsers ( ) ;
33+ const setCookieImportProfiles = useProjectPreferencesStore (
34+ ( state ) => state . setCookieImportProfiles ,
35+ ) ;
36+ const { data, isLoading } = useInstalledBrowsers ( ) ;
3337
3438 const [ highlightedIndex , setHighlightedIndex ] = useState ( 0 ) ;
35- const [ selectedKeys , setSelectedKeys ] = useState < Set < string > > ( new Set ( ) ) ;
39+ const [ selectedIds , setSelectedIds ] = useState < Set < string > > ( new Set ( ) ) ;
3640 const defaultsInitialized = useRef ( false ) ;
3741
38- const items : DetectedBrowser [ ] = browsers ?? [ ] ;
42+ const items = data ?. browsers ?? [ ] ;
3943 const itemCount = items . length ;
4044
4145 useEffect ( ( ) => {
42- if ( defaultsInitialized . current || ! browsers || browsers . length === 0 ) return ;
46+ if ( defaultsInitialized . current || ! data || data . browsers . length === 0 ) return ;
4347 defaultsInitialized . current = true ;
44- const defaultBrowser = browsers . find ( ( browser ) => browser . isDefault ) ;
45- if ( defaultBrowser ) {
46- setSelectedKeys ( new Set ( [ defaultBrowser . key ] ) ) ;
48+ if ( Option . isSome ( data . default ) ) {
49+ setSelectedIds ( new Set ( [ data . default . value . id ] ) ) ;
4750 }
48- } , [ browsers ] ) ;
51+ } , [ data ] ) ;
4952
50- const toggleKey = ( key : string ) => {
51- setSelectedKeys ( ( previous ) => {
53+ const toggleId = ( id : string ) => {
54+ setSelectedIds ( ( previous ) => {
5255 const next = new Set ( previous ) ;
53- if ( next . has ( key ) ) {
54- next . delete ( key ) ;
56+ if ( next . has ( id ) ) {
57+ next . delete ( id ) ;
5558 } else {
56- next . add ( key ) ;
59+ next . add ( id ) ;
5760 }
5861 return next ;
5962 } ) ;
6063 } ;
6164
6265 const confirm = ( ) => {
63- const keys = [ ... selectedKeys ] ;
64- setCookieBrowserKeys ( keys ) ;
66+ const selectedProfiles = items . filter ( ( browser ) => selectedIds . has ( browser . id ) ) ;
67+ setCookieImportProfiles ( selectedProfiles ) ;
6568 trackEvent ( "cookies:browser_selection" , {
66- selected_count : keys . length ,
67- browsers : keys . join ( "," ) ,
69+ selected_count : selectedProfiles . length ,
70+ browsers : selectedProfiles . map ( ( browser ) => browser . displayName ) . join ( ", " ) ,
6871 } ) ;
6972 if ( changesFor && instruction ) {
7073 setScreen (
7174 screenForTestingOrPortPicker ( {
7275 changesFor,
7376 instruction,
7477 savedFlow,
75- cookieBrowserKeys : keys ,
78+ cookieImportProfiles : selectedProfiles ,
7679 } ) ,
7780 ) ;
7881 } else {
@@ -93,16 +96,15 @@ export const CookieSyncConfirmScreen = ({
9396
9497 if ( input === " " && itemCount > 0 ) {
9598 const item = items [ highlightedIndex ] ;
96- if ( item ) toggleKey ( item . key ) ;
99+ if ( item ) toggleId ( item . id ) ;
97100 }
98101
99102 if ( input === "a" ) {
100- const allKeys = items . map ( ( browser ) => browser . key ) ;
101- setSelectedKeys ( new Set ( allKeys ) ) ;
103+ setSelectedIds ( new Set ( items . map ( ( browser ) => browser . id ) ) ) ;
102104 }
103105
104106 if ( input === "n" ) {
105- setSelectedKeys ( new Set ( ) ) ;
107+ setSelectedIds ( new Set ( ) ) ;
106108 }
107109
108110 if ( key . return ) {
@@ -114,7 +116,7 @@ export const CookieSyncConfirmScreen = ({
114116 }
115117 } ) ;
116118
117- const selectedCount = selectedKeys . size ;
119+ const selectedCount = selectedIds . size ;
118120
119121 return (
120122 < Box flexDirection = "column" width = "100%" paddingY = { 1 } paddingX = { 1 } >
@@ -150,15 +152,18 @@ export const CookieSyncConfirmScreen = ({
150152 { ! isLoading && (
151153 < Box flexDirection = "column" marginTop = { 1 } >
152154 { items . map ( ( browser , index ) => {
155+ const id = browser . id ;
153156 const isHighlighted = index === highlightedIndex ;
154- const isSelected = selectedKeys . has ( browser . key ) ;
157+ const isSelected = selectedIds . has ( id ) ;
158+ const isDefault =
159+ Option . isSome ( data ! . default ) && data ! . default . value . id === id ;
155160
156161 return (
157162 < Clickable
158- key = { browser . key }
163+ key = { id }
159164 onClick = { ( ) => {
160165 setHighlightedIndex ( index ) ;
161- toggleKey ( browser . key ) ;
166+ toggleId ( id ) ;
162167 } }
163168 >
164169 < Box >
@@ -171,7 +176,7 @@ export const CookieSyncConfirmScreen = ({
171176 < Text color = { isHighlighted ? COLORS . PRIMARY : COLORS . TEXT } bold = { isHighlighted } >
172177 { browser . displayName }
173178 </ Text >
174- { browser . isDefault && < Text color = { COLORS . DIM } > (default)</ Text > }
179+ { isDefault && < Text color = { COLORS . DIM } > (default)</ Text > }
175180 </ Box >
176181 </ Clickable >
177182 ) ;
0 commit comments