Add new questions to survejs form
This commit is contained in:
parent
2885cc09b6
commit
cf47b79052
|
@ -48,45 +48,6 @@ export default function emailHostSettings(
|
||||||
<aside>
|
<aside>
|
||||||
{Object.entries(config.hosts_settings).map(([host_id, settings]) => (
|
{Object.entries(config.hosts_settings).map(([host_id, settings]) => (
|
||||||
<div key={host_id}>
|
<div key={host_id}>
|
||||||
<h5>{/* {host_id}, {hostNeedsQuestions(settings).toString()} */}</h5>
|
|
||||||
<p>
|
|
||||||
Cele przetwarzania danych przez właściciela domeny {host_id}{' '}
|
|
||||||
{/* {hostSettingsDropdown({
|
|
||||||
host_id,
|
|
||||||
setConfig,
|
|
||||||
settings,
|
|
||||||
field: 'presence',
|
|
||||||
value: settings.presence,
|
|
||||||
options: {
|
|
||||||
not_mentioned: ['nie są nigdzie na stronie opisane'],
|
|
||||||
mentioned_in_policy: [
|
|
||||||
'są opisane w polityce prywatności',
|
|
||||||
config.policy_readable !== 'yes',
|
|
||||||
],
|
|
||||||
mentioned_in_popup: ['są opisane w okienku RODO'],
|
|
||||||
},
|
|
||||||
})} */}
|
|
||||||
</p>
|
|
||||||
{!['not_mentioned', 'null'].includes(settings.presence) ? (
|
|
||||||
<p>
|
|
||||||
Wskazana przez administratora podstawa prawna dla{' '}
|
|
||||||
<strong> tego konkretnego celu</strong>{' '}
|
|
||||||
{/* {hostSettingsDropdown({
|
|
||||||
host_id,
|
|
||||||
setConfig,
|
|
||||||
settings,
|
|
||||||
field: 'legal_basis_type' as const,
|
|
||||||
value: settings.legal_basis_type,
|
|
||||||
options: {
|
|
||||||
consent: ['to zgoda.'],
|
|
||||||
legitimate_interest: ['to uzasadniony interes.'],
|
|
||||||
not_mentioned: ['nie jest wskazana nigdzie na stronie.'],
|
|
||||||
},
|
|
||||||
})} */}
|
|
||||||
</p>
|
|
||||||
) : (
|
|
||||||
''
|
|
||||||
)}
|
|
||||||
{!['not_mentioned', 'null'].includes(settings.legal_basis_type) ? (
|
{!['not_mentioned', 'null'].includes(settings.legal_basis_type) ? (
|
||||||
<div>
|
<div>
|
||||||
{ConsentProblems({ settings, host_id, pronoun: p, setConfig })}
|
{ConsentProblems({ settings, host_id, pronoun: p, setConfig })}
|
||||||
|
|
|
@ -5,8 +5,134 @@ import emailHostSettings from './email-host-settings';
|
||||||
import { EmailTemplate3Config } from './email-template-3';
|
import { EmailTemplate3Config } from './email-template-3';
|
||||||
import verbs from './verbs';
|
import verbs from './verbs';
|
||||||
|
|
||||||
|
function generateHostPage(
|
||||||
|
host: string,
|
||||||
|
index: number,
|
||||||
|
all_hosts: string[]
|
||||||
|
): { title: string; elements: any[] } {
|
||||||
|
function f(name: string, h = host) {
|
||||||
|
return `${h.replace(/\./g, '_')}|${name}`;
|
||||||
|
}
|
||||||
|
const previous_host: string | null = index > 0 ? all_hosts[index - 1] : null;
|
||||||
|
function defaultValue(name: string) {
|
||||||
|
if (!previous_host) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
return { defaultValueExpression: `{${f(name, previous_host)}}` };
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
title: host,
|
||||||
|
elements: [
|
||||||
|
{
|
||||||
|
type: 'dropdown',
|
||||||
|
name: f('present'),
|
||||||
|
isRequired: true,
|
||||||
|
title: `Cel ujawnienia danych właścicielowi domeny ${host}`,
|
||||||
|
...defaultValue('present'),
|
||||||
|
choices: [
|
||||||
|
{ value: 'not_mentioned', text: 'nie jest podany nigdzie na stronie' },
|
||||||
|
{
|
||||||
|
value: 'mentioned_in_policy',
|
||||||
|
text: 'jest podany w polityce prywatności',
|
||||||
|
visibleIf: "{policy_readable} = 'yes' ",
|
||||||
|
},
|
||||||
|
|
||||||
|
{ value: 'mentioned_in_popup', text: 'jest podany w okienku RODO' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'dropdown',
|
||||||
|
name: f('legal_basis_type'),
|
||||||
|
...defaultValue('legal_basis_type'),
|
||||||
|
isRequired: true,
|
||||||
|
title: `Podstawa prawna dla tego konkretnego celu`,
|
||||||
|
visibleIf: `{${f('present')}} notempty and {${f('present')}} != "not_mentioned"`,
|
||||||
|
choices: [
|
||||||
|
{ value: 'consent', text: 'to zgoda.' },
|
||||||
|
{
|
||||||
|
value: 'legitimate_interest',
|
||||||
|
text: 'to uzasadniony interes.',
|
||||||
|
},
|
||||||
|
{ value: 'not_mentioned', text: 'nie jest wskazana nigdzie na stronie.' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'radiogroup',
|
||||||
|
name: f('consent_problems'),
|
||||||
|
...defaultValue('consent_problems'),
|
||||||
|
isRequired: true,
|
||||||
|
title: `Jak ma się ta podstawa prawna do stanu faktycznego?`,
|
||||||
|
visibleIf: `{${f('legal_basis_type')}} = "consent"`,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
value: 'claims_consent_but_sends_before_consent',
|
||||||
|
text: `Strona wysłała {moje} dane do ${host} zanim {wyraziłem} na to zgodę`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 'claims_consent_but_there_was_no_easy_refuse',
|
||||||
|
text: '{Kliknąłem} przycisk od wyrażania zgody, ale w okienku o zgodę nie było natychmiastowo dostępnego przycisku do niewyrażenia zgody jednym kliknięciem',
|
||||||
|
},
|
||||||
|
{ value: 'none', text: 'żadne z powyższych.' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'dropdown',
|
||||||
|
name: f('legitimate_interest_activity_specified'),
|
||||||
|
...defaultValue('legitimate_interest_activity_specified'),
|
||||||
|
isRequired: true,
|
||||||
|
title: /* HTML */ `Czy administrator strony opisał szczegółowo, na czym polega
|
||||||
|
uzasadniony interes w kontekście tego celu?`,
|
||||||
|
visibleIf: `{${f('legal_basis_type')}} = "legitimate_interest"`,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
value: 'precise',
|
||||||
|
text: /* HTML */ `Tak, wskazuje jasno na bieżące działania lub korzyści
|
||||||
|
wynikające z takiego przetwarzania danych.`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 'vague',
|
||||||
|
text: `Wskazuje tylko ogólnie, jak np. „marketing” czy „statystyki”.`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 'no',
|
||||||
|
text: `Nie. Nie wiadomo, na czym ten uzasadniony interes polega.`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'text',
|
||||||
|
title: `Jak administrator opisał to, na czym polega uzasadniony interes w kontekście ${host}?`,
|
||||||
|
name: f('legitimate_interest_description'),
|
||||||
|
visibleIf: `{${f('legitimate_interest_activity_specified')}} = 'vague'`,
|
||||||
|
defaultValueExpression:
|
||||||
|
index == 0
|
||||||
|
? 'marketing'
|
||||||
|
: `{${f('legitimate_interest_description', previous_host)}}`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'dropdown',
|
||||||
|
title: `Czy domena ${host} należy do podmiotu spoza Europy (np. Google, Facebook)?`,
|
||||||
|
name: f('outside_eu'),
|
||||||
|
...defaultValue('outside_eu'),
|
||||||
|
visibleIf: `{${f('legitimate_interest_activity_specified')}} = "precise" or {${f(
|
||||||
|
'consent_problems'
|
||||||
|
)}} = "none"`,
|
||||||
|
choices: [
|
||||||
|
{ value: 'yes', text: 'Tak' },
|
||||||
|
{ value: 'no', text: 'Nie' },
|
||||||
|
{ value: 'not_sure', text: 'Nie wiem' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function EmailTemplate3Controls({ hosts }: { hosts: string[] }) {
|
||||||
|
const [survey, setSurvey] = React.useState<Survey.Model>(null);
|
||||||
|
React.useEffect(() => {
|
||||||
var json = {
|
var json = {
|
||||||
showQuestionNumbers: 'off',
|
showQuestionNumbers: 'off',
|
||||||
|
showProgressBar: 'top',
|
||||||
pages: [
|
pages: [
|
||||||
{
|
{
|
||||||
title: 'Zaimki',
|
title: 'Zaimki',
|
||||||
|
@ -25,12 +151,84 @@ var json = {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: 'Obowiązek informacyjny i machanizm pozyskiwania zgody',
|
||||||
|
elements: [
|
||||||
|
{
|
||||||
|
type: 'radiogroup',
|
||||||
|
title: 'Jaką formę informacji o przetwarzaniu danych osobowych stosuje ta strona?',
|
||||||
|
name: 'popup_type',
|
||||||
|
isRequired: true,
|
||||||
|
choices: [
|
||||||
|
{ value: 'none', text: 'Brak informacji' },
|
||||||
|
{
|
||||||
|
value: 'passive_popup',
|
||||||
|
text: /* HTML */ `Okienko o cookiesach, bez możliwości podjęcia
|
||||||
|
żadnego wyboru (np. tylko opcja „zamknij”)`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 'some_choice',
|
||||||
|
text: 'Okienko o cookiesach, z możliwością podjęcia wyboru',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'checkbox',
|
||||||
|
title: /* HTML */ `Istnieje możliwość, że okienko z informacjami i
|
||||||
|
wyborami dotyczącymi przetwarzania {Twoich} danych osobowych ukazało się
|
||||||
|
dawno temu w trakcie {twojej} wcześniejszej wizyty i wtedy je
|
||||||
|
{odkliknąłeś}. {Otwórz} tę samą stronę w Trybie Prywatnym (Incognito).
|
||||||
|
Co {widzisz}?`,
|
||||||
|
visibleIf: "{popup_type} = 'none'",
|
||||||
|
name: 'is_incognito_different',
|
||||||
|
isRequired: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
value: 'incognito_is_the_same',
|
||||||
|
text: 'W Trybie prywatnym {widzę} to samo, co {widziałem} w normalnym trybie',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'html',
|
||||||
|
visibleIf: '{is_incognito_different} != "no" and {popup_type} = "none"',
|
||||||
|
html: /* HTML */ `Jeżeli w trybie incognito widzisz więcej okienek z
|
||||||
|
informacjami o przetwarzaniu danych osobowych, wykonaj analizę w
|
||||||
|
normalnym trybie ponownie - ale najpierw usuń pliki cookies tej
|
||||||
|
strony.
|
||||||
|
<a
|
||||||
|
href="https://support.mozilla.org/pl/kb/usuwanie-ciasteczek-i-danych-stron-firefox?redirectslug=usuwanie-ciasteczek&redirectlocale=pl"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
Zobacz, jak to zrobić
|
||||||
|
</a>`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'radiogroup',
|
||||||
|
name: 'mentions_passive_consent',
|
||||||
|
isRequired: true,
|
||||||
|
visibleIf: '{popup_type} = "passive_popup"',
|
||||||
|
title: 'Czy treść okienka wskazuje na zgodę wyrażoną pasywnie, np. „Korzystając z naszej strony wyrażasz zgodę” lub „Brak zmiany ustawień przeglądarki oznacza zgodę”?',
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
value: 'yes',
|
||||||
|
text: 'Tak',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 'no',
|
||||||
|
text: 'Nie',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: 'Polityka prywatności',
|
title: 'Polityka prywatności',
|
||||||
elements: [
|
elements: [
|
||||||
{
|
{
|
||||||
type: 'dropdown',
|
type: 'dropdown',
|
||||||
title: 'Czy polityka prywatności jest dostępna i czytelna?',
|
title: 'Czy polityka prywatności jest dostępna i czytelna?',
|
||||||
|
name: 'policy_readable',
|
||||||
isRequired: true,
|
isRequired: true,
|
||||||
choices: [
|
choices: [
|
||||||
{ value: 'yes', text: 'dostępna i czytelna' },
|
{ value: 'yes', text: 'dostępna i czytelna' },
|
||||||
|
@ -46,9 +244,12 @@ var json = {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
...hosts.map(generateHostPage),
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
console.log(json);
|
||||||
|
|
||||||
const survey = new Survey.Model(json);
|
const survey = new Survey.Model(json);
|
||||||
survey.onProcessTextValue.add(function (
|
survey.onProcessTextValue.add(function (
|
||||||
sender: Survey.SurveyModel,
|
sender: Survey.SurveyModel,
|
||||||
|
@ -57,12 +258,20 @@ survey.onProcessTextValue.add(function (
|
||||||
if (verbs[options.name.toLowerCase()]) {
|
if (verbs[options.name.toLowerCase()]) {
|
||||||
options.value = verbs[options.name.toLowerCase()][sender.valuesHash.zaimek];
|
options.value = verbs[options.name.toLowerCase()][sender.valuesHash.zaimek];
|
||||||
if (options.name[0] == options.name[0].toUpperCase()) {
|
if (options.name[0] == options.name[0].toUpperCase()) {
|
||||||
options.value = [options.value[0].toUpperCase(), ...options.value.slice(1)].join('');
|
options.value = [
|
||||||
|
options.value[0].toUpperCase(),
|
||||||
|
...options.value.slice(1),
|
||||||
|
].join('');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
setSurvey(survey);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
if (!survey) {
|
||||||
|
return <div>Wczytywanie...</div>;
|
||||||
|
}
|
||||||
|
|
||||||
export default function EmailTemplate3Controls() {
|
|
||||||
return <Survey.Survey model={survey} />;
|
return <Survey.Survey model={survey} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,7 @@ export default function EmailTemplate3({
|
||||||
return (
|
return (
|
||||||
<div className="mail-wrapper">
|
<div className="mail-wrapper">
|
||||||
<div className="mail-controls">
|
<div className="mail-controls">
|
||||||
<EmailTemplate3Controls {...{ config, setConfig }} />
|
<EmailTemplate3Controls {...{ config, setConfig, hosts: all_host_ids }} />
|
||||||
</div>
|
</div>
|
||||||
<div className="mail-content-wrapper">
|
<div className="mail-content-wrapper">
|
||||||
<article className="mail-content">
|
<article className="mail-content">
|
||||||
|
|
|
@ -2,4 +2,18 @@ export default {
|
||||||
zrobiłem: ['zrobiłem', 'zrobiłam', 'zrobiłom', 'zrobiliśmy'],
|
zrobiłem: ['zrobiłem', 'zrobiłam', 'zrobiłom', 'zrobiliśmy'],
|
||||||
szukałem: ['szukałem', 'szukałam', 'szukałom', 'szukaliśmy'],
|
szukałem: ['szukałem', 'szukałam', 'szukałom', 'szukaliśmy'],
|
||||||
znalazłem: ['znalazłem', 'znalazłam', 'znalazłom', 'znaleźliśmy'],
|
znalazłem: ['znalazłem', 'znalazłam', 'znalazłom', 'znaleźliśmy'],
|
||||||
|
moje: ['moje', 'moje', 'moje', 'nasze'],
|
||||||
|
wyraziłem: ['wyraziłem', 'wyraziłam', 'wyraziłom', 'wyraziliśmy'],
|
||||||
|
kliknąłem: ['kliknąłem', 'kliknęłam', 'klinkęłom', 'kliknęliśmy'],
|
||||||
|
odwiedzałeś: ['odwiedzałeś', 'odwiedzałaś', 'odwiedzałoś', 'odwiedzaliście'],
|
||||||
|
wyraziłeś: ['wyraziłeś', 'wyraziłaś', 'wyraziłoś', 'wyraziliście'],
|
||||||
|
jesteś: ['jesteś', 'jesteś', 'jesteś', 'jesteście'],
|
||||||
|
twoich: ['twoich', 'twoich', 'twoich', 'waszych'],
|
||||||
|
tobie: ['tobie', 'tobie', 'tobie', 'wam'],
|
||||||
|
twojej: ['twojej', 'twojej', 'twojej', 'waszej'],
|
||||||
|
odkliknąłeś: ['odkliknąłeś', 'odkliknęłaś', 'odklikęłoś', 'odkliknęliście'],
|
||||||
|
otwórz: ['otwórz', 'otwórz', 'otwórz', 'otwórzcie'],
|
||||||
|
widzisz: ['widzisz', 'widzisz', 'widzisz', 'widzicie'],
|
||||||
|
widzę: ['widzę', 'widzę', 'widzę', 'widzimy'],
|
||||||
|
widziałem: ['widziałem', 'widziałam', 'widziałom', 'widzieliśmy'],
|
||||||
} as { [key: string]: string[] };
|
} as { [key: string]: string[] };
|
||||||
|
|
Loading…
Reference in New Issue
Block a user