fremtind / jokul

Jøkul er et designsystem utviklet av Fremtind.
https://jokul.fremtind.no
MIT License
64 stars 31 forks source link

Det er ikke mulig å endre selected fra utsiden etter at komponenten først er initialisert. #4273

Open mariusingjer opened 4 days ago

mariusingjer commented 4 days ago

Eksempel:

Select value styres som internal state, det gjør det umulig å oppdatere fra utsiden, feks hvis du ønsker å endre verdien i select basert på endring av en annen verdi:

https://github.com/fremtind/jokul/blob/451818c62f94ef33a64c410c3805be5f6e3db063/packages/select-react/src/Select.tsx#L183

Forventet oppførsel

Jeg forventer at den skal fungere på samme måte som NativeSelect, dvs at jeg selected oppdateres seg hvis value prop endrer seg.

ivarni commented 4 days ago

Enig. Når vi først har valgt å ta inn en value så må vi ta hensyn til verdien av den.

ivarni commented 4 days ago

@mariusingjer Når jeg tester dette lokalt på dev-serveren så fungerer det fint å endre value både før og etter at jeg har gjort et manuelt valg.

Relevante biter av koden i Select er

        const valueIsInItems: boolean = useMemo(() => {
            if (typeof value === "undefined") {
                return false;
            }
            return items.some((item) =>
                typeof item === "string"
                    ? item === value
                    : item.value === value,
            );
        }, [value, items]);

og

        useEffect(() => {
            if (value === previousValue) {
                return;
            }
            if (typeof value === "undefined" || !valueIsInItems) {
                setSelectedValue("");
            } else {
                setSelectedValue(value);
            }
        }, [setSelectedValue, value, previousValue, valueIsInItems]);

Er det mulig å dra ut et kjørbart eksempel der det ikke fungerer så kan jeg prøve å bistå i feilsøking. Det er mye kompleksitet i den komponenten så det kan godt hende det er forskjellige ting som går i beina på hverandre men det er lettere å forstå hva dersom jeg klarer å provosere frem feilen.

mariusingjer commented 4 days ago

Hmm, den effekten der burde håndtere det ja, jeg skal ta en titt på saken.