@tietokilta/ilmomasiina-client 2.0.0-alpha42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +19 -0
  3. package/dist/api.d.ts +17 -0
  4. package/dist/api.d.ts.map +1 -0
  5. package/dist/api.js +63 -0
  6. package/dist/index.d.ts +8 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +23 -0
  9. package/dist/locales/en.json +132 -0
  10. package/dist/locales/fi.json +132 -0
  11. package/dist/locales/index.d.ts +267 -0
  12. package/dist/locales/index.d.ts.map +1 -0
  13. package/dist/locales/index.js +14 -0
  14. package/dist/modules/editSignup/actions.d.ts +13 -0
  15. package/dist/modules/editSignup/actions.d.ts.map +1 -0
  16. package/dist/modules/editSignup/actions.js +23 -0
  17. package/dist/modules/editSignup/index.d.ts +13 -0
  18. package/dist/modules/editSignup/index.d.ts.map +1 -0
  19. package/dist/modules/editSignup/index.js +82 -0
  20. package/dist/modules/editSignup/state.d.ts +19 -0
  21. package/dist/modules/editSignup/state.d.ts.map +1 -0
  22. package/dist/modules/editSignup/state.js +6 -0
  23. package/dist/modules/eventList/index.d.ts +18 -0
  24. package/dist/modules/eventList/index.d.ts.map +1 -0
  25. package/dist/modules/eventList/index.js +59 -0
  26. package/dist/modules/singleEvent/actions.d.ts +6 -0
  27. package/dist/modules/singleEvent/actions.d.ts.map +1 -0
  28. package/dist/modules/singleEvent/actions.js +11 -0
  29. package/dist/modules/singleEvent/index.d.ts +26 -0
  30. package/dist/modules/singleEvent/index.d.ts.map +1 -0
  31. package/dist/modules/singleEvent/index.js +60 -0
  32. package/dist/utils/abortable.d.ts +29 -0
  33. package/dist/utils/abortable.d.ts.map +1 -0
  34. package/dist/utils/abortable.js +85 -0
  35. package/dist/utils/errorMessage.d.ts +16 -0
  36. package/dist/utils/errorMessage.d.ts.map +1 -0
  37. package/dist/utils/errorMessage.js +45 -0
  38. package/dist/utils/eventListUtils.d.ts +31 -0
  39. package/dist/utils/eventListUtils.d.ts.map +1 -0
  40. package/dist/utils/eventListUtils.js +68 -0
  41. package/dist/utils/localizedEvent.d.ts +10 -0
  42. package/dist/utils/localizedEvent.d.ts.map +1 -0
  43. package/dist/utils/localizedEvent.js +58 -0
  44. package/dist/utils/signupState.d.ts +20 -0
  45. package/dist/utils/signupState.d.ts.map +1 -0
  46. package/dist/utils/signupState.js +26 -0
  47. package/dist/utils/signupUtils.d.ts +26 -0
  48. package/dist/utils/signupUtils.d.ts.map +1 -0
  49. package/dist/utils/signupUtils.js +81 -0
  50. package/dist/utils/stateContext.d.ts +10 -0
  51. package/dist/utils/stateContext.d.ts.map +1 -0
  52. package/dist/utils/stateContext.js +30 -0
  53. package/dist/utils/useShallowMemo.d.ts +3 -0
  54. package/dist/utils/useShallowMemo.d.ts.map +1 -0
  55. package/dist/utils/useShallowMemo.js +32 -0
  56. package/package.json +46 -0
  57. package/src/locales/en.json +132 -0
  58. package/src/locales/fi.json +132 -0
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Informaatioverkostojen kilta Athene ry
4
+ Copyright (c) 2021 Tietokilta ry
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,19 @@
1
+ # `ilmomasiina-client`
2
+
3
+ This package provides ready-to-use building blocks for [Ilmomasiina](https://github.com/Tietokilta/ilmomasiina)
4
+ frontends.
5
+
6
+ Frontend developers should import the supported items directly from `@tietokilta/ilmomasiina-client`. Most files
7
+ in `dist` are not part of the public interface. (The files in `dist/utils` are also public, but likely less stable.)
8
+
9
+ **Note:** This package follows the versioning of Ilmomasiina. We will avoid breaking changes in the API, but minor
10
+ versions may occasionally be incompatible with each other. If writing custom frontends, we recommend fixing the
11
+ minor version (`"@tietokilta/ilmomasiina-client": "~2.x.x"` in `package.json`).
12
+
13
+ ## Functionality
14
+
15
+ This package exports functions for three routes: `Events`, `SingleEvent`, and `EditSignup`.
16
+
17
+ For each of the views, the package exports the `use{ViewName}Context` hook, the `{ViewName}Provider` component, and
18
+ the `use{ViewName}State` hook. For more context on these, see
19
+ [docs/state-context.md](https://github.com/Tietokilta/ilmomasiina/blob/dev/docs/state-context.md).
package/dist/api.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ import { ErrorCode } from "@tietokilta/ilmomasiina-models";
2
+ export interface FetchOptions {
3
+ method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
4
+ body?: any;
5
+ headers?: Record<string, string>;
6
+ signal?: AbortSignal;
7
+ }
8
+ export declare class ApiError extends Error {
9
+ status: number;
10
+ code?: ErrorCode;
11
+ response?: any;
12
+ constructor(status: number, response: any);
13
+ static fromResponse(response: Response): Promise<ApiError>;
14
+ }
15
+ export declare function configureApi(url: string): void;
16
+ export declare function apiFetch<T = unknown>(uri: string, { method, body, headers, signal }?: FetchOptions): Promise<T>;
17
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrD,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,qBAAa,QAAS,SAAQ,KAAK;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,GAAG,CAAC;gBAEH,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG;WAQ5B,YAAY,CAAC,QAAQ,EAAE,QAAQ;CAW7C;AAID,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,QAEvC;AAED,wBAAsB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,MAAc,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAE,YAAiB,cA6BpH"}
package/dist/api.js ADDED
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.apiFetch = exports.configureApi = exports.ApiError = void 0;
4
+ class ApiError extends Error {
5
+ status;
6
+ code;
7
+ response;
8
+ constructor(status, response) {
9
+ super(response.message);
10
+ this.status = status;
11
+ this.name = "ApiError";
12
+ this.code = response.code;
13
+ this.response = response;
14
+ }
15
+ static async fromResponse(response) {
16
+ try {
17
+ const data = await response.json();
18
+ if (data.message) {
19
+ return new ApiError(response.status, data);
20
+ }
21
+ }
22
+ catch (e) {
23
+ /* fall through */
24
+ }
25
+ return new ApiError(response.status, { message: response.statusText });
26
+ }
27
+ }
28
+ exports.ApiError = ApiError;
29
+ let apiUrl = "/api";
30
+ function configureApi(url) {
31
+ apiUrl = url;
32
+ }
33
+ exports.configureApi = configureApi;
34
+ async function apiFetch(uri, { method = "GET", body, headers, signal } = {}) {
35
+ const allHeaders = {
36
+ ...(headers || {}),
37
+ };
38
+ if (body !== undefined) {
39
+ allHeaders["Content-Type"] = "application/json; charset=utf-8";
40
+ }
41
+ const response = await fetch(`${apiUrl}/${uri}`, {
42
+ method,
43
+ body: body === undefined ? undefined : JSON.stringify(body),
44
+ headers: allHeaders,
45
+ signal,
46
+ }).catch((err) => {
47
+ // convert network errors to barebones ApiError
48
+ throw new ApiError(0, err);
49
+ });
50
+ // proper API errors, try to parse JSON
51
+ if (!response.ok) {
52
+ throw await ApiError.fromResponse(response);
53
+ }
54
+ // 204 No Content
55
+ if (response.status === 204) {
56
+ return null;
57
+ }
58
+ // just in case, convert JSON parse errors for 2xx responses to ApiError
59
+ return response.json().catch((err) => {
60
+ throw new ApiError(0, err);
61
+ });
62
+ }
63
+ exports.apiFetch = apiFetch;
@@ -0,0 +1,8 @@
1
+ export * from "./api";
2
+ export * from "./modules/eventList";
3
+ export * from "./modules/singleEvent";
4
+ export * from "./modules/editSignup";
5
+ export * from "./locales";
6
+ export * from "./utils/errorMessage";
7
+ export * from "./utils/localizedEvent";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AAEtB,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AAErC,cAAc,WAAW,CAAC;AAE1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./api"), exports);
18
+ __exportStar(require("./modules/eventList"), exports);
19
+ __exportStar(require("./modules/singleEvent"), exports);
20
+ __exportStar(require("./modules/editSignup"), exports);
21
+ __exportStar(require("./locales"), exports);
22
+ __exportStar(require("./utils/errorMessage"), exports);
23
+ __exportStar(require("./utils/localizedEvent"), exports);
@@ -0,0 +1,132 @@
1
+ {
2
+ "public": {
3
+ "dateFormat.locale": "en-FI",
4
+ "duration.days_one": "{{count}} day",
5
+ "duration.days_other": "{{count}} days",
6
+ "duration.hours_one": "{{count}} hour",
7
+ "duration.hours_other": "{{count}} hours",
8
+ "duration.mins_one": "{{count}} minute",
9
+ "duration.mins_other": "{{count}} minutes",
10
+ "duration.secs_one": "{{count}} second",
11
+ "duration.secs_other": "{{count}} seconds",
12
+ "editSignup.backToEvent": "Back to event page",
13
+ "editSignup.action.cancel": "Cancel",
14
+ "editSignup.action.edit": "Update",
15
+ "editSignup.action.save": "Save",
16
+ "editSignup.action.back": "Back",
17
+ "editSignup.delete.action": "Delete signup",
18
+ "editSignup.delete.action.confirm": "Click again to confirm\u2026",
19
+ "editSignup.delete.info1": "Are you sure you want to delete your sign up to <1>{{event}}</1>?",
20
+ "editSignup.delete.info2": "If you delete your signup you will lose your spot in the queue. If you change your mind you can always sign up again to the event later, but you will be moved to the end of the queue.",
21
+ "editSignup.delete.info3": "This cannot be undone.",
22
+ "editSignup.editInstructions.email": "The link will also be included in the confirmation email.",
23
+ "editSignup.editInstructions": "You can edit or delete your signup later by saving the URL of this page.",
24
+ "editSignup.loadError.BadEditToken.title": "Invalid verification token",
25
+ "editSignup.loadError.BadEditToken.description": "The verification token in the URL is incorrect. Please verify that you typed the URL correctly.",
26
+ "editSignup.loadError.404.title": "Signup not found",
27
+ "editSignup.loadError.404.description": "Your signup was not found. It might be already deleted, or you might have mistyped the URL.",
28
+ "editSignup.loadError.default.description": "Your signup could not be loaded.",
29
+ "editSignup.fields.email": "Email",
30
+ "editSignup.fields.email.placeholder": "Email",
31
+ "editSignup.fields.firstName": "First name",
32
+ "editSignup.fields.firstName.placeholder": "First name",
33
+ "editSignup.fields.lastName": "Last name",
34
+ "editSignup.fields.lastName.placeholder": "Last name",
35
+ "editSignup.fields.select.placeholder": "Choose\u2026",
36
+ "editSignup.namePublic": "Show name in public signup list",
37
+ "editSignup.position.openQuota": "You are in the open quota in position {{position}}.",
38
+ "editSignup.position.queue": "You are in the queue in position {{position}}.",
39
+ "editSignup.position.quota": "You are in quota {{quota}} in position {{position}}.",
40
+ "editSignup.editable.unconfirmed": "Your signup is still valid for {{duration}}. Save the form to make sure it doesn't expire.",
41
+ "editSignup.editable.confirmed": "Your signup can still be edited for: {{duration}}",
42
+ "editSignup.editable.closed": "Your signup cannot be changed anymore as the signup for the event has closed.",
43
+ "editSignup.publicQuestion": "Answers to this field are public.",
44
+ "editSignup.status.delete": "Deleting signup",
45
+ "editSignup.status.deleteSuccess": "Your signup was deleted successfully.",
46
+ "editSignup.status.edit": "Updating signup",
47
+ "editSignup.status.editSuccess": "Editing succeeded",
48
+ "editSignup.status.signup": "Saving signup",
49
+ "editSignup.status.signupSuccess": "Signup succeeded",
50
+ "editSignup.deleteError.SignupsClosed.description": "The signup for this event has closed, so your signup could no longer be deleted.",
51
+ "editSignup.deleteError.NoSuchSignup.description": "Your signup has already been deleted.",
52
+ "editSignup.deleteError.default.description": "Deletion failed",
53
+ "editSignup.editError.SignupsClosed.description": "The signup for this event has closed, so your changes could no longer be saved.",
54
+ "editSignup.editError.NoSuchSignup.description": "Your signup was not found. It might be already deleted.",
55
+ "editSignup.editError.400.description": "Editing failed. Make sure you have filled all mandatory fields and try again.",
56
+ "editSignup.editError.default.description": "Editing failed.",
57
+ "editSignup.signupError.SignupsClosed.description": "The signup for this event has closed, so your signup could no longer be saved.",
58
+ "editSignup.signupError.NoSuchSignup.description": "Your signup was not found. It might be already deleted.",
59
+ "editSignup.signupError.400.description": "Signup failed. Make sure you have filled all mandatory fields and try again.",
60
+ "editSignup.signupError.default.description": "Signup failed.",
61
+ "editSignup.fieldError.missing": "This field is mandatory.",
62
+ "editSignup.fieldError.wrongType": "The answer to this field is of the wrong type. Try refreshing the page.",
63
+ "editSignup.fieldError.tooLong": "The answer to this field is too long.",
64
+ "editSignup.fieldError.invalidEmail": "The email address is invalid.",
65
+ "editSignup.fieldError.notANumber": "The answer to this question must be a valid number.",
66
+ "editSignup.fieldError.notAnOption": "The answer to this question isn't in the allowed options. Try refreshing the page.",
67
+ "editSignup.fieldError": "The answer to this field is invalid. Try refreshing the page.",
68
+ "editSignup.title.edit": "Edit signup",
69
+ "editSignup.title.signup": "Sign up",
70
+ "editSignup.title.preview": "Preview signup form",
71
+ "errors.returnToEvents": "Return to event list",
72
+ "errors.contactAdmin": "If the problem persists, please report it to the administrators.",
73
+ "errors.default.title": "Whoops, something went wrong",
74
+ "errors.InitialSetupNeeded.title": "Initial setup needed",
75
+ "errors.InitialSetupNeeded.description": "The server seems to be freshly installed. This frontend doesn't support initial setup \u2013 please visit the admin interface to set up the server.",
76
+ "errors.500.description": "An internal error occurred on the server. $t(errors.contactAdmin)",
77
+ "errors.502.description": "The backend server seems to be down. $t(errors.contactAdmin)",
78
+ "errors.503.description": "The backend server seems to be down. $t(errors.contactAdmin)",
79
+ "errors.504.description": "The backend server seems to be unresponsive. $t(errors.contactAdmin)",
80
+ "errors.default.description": "An unknown error occurred. $t(errors.contactAdmin)",
81
+ "events.column.date": "Date",
82
+ "events.column.name": "Name",
83
+ "events.column.signupCount": "Signups",
84
+ "events.column.signupStatus": "Signup",
85
+ "events.loadError.default.description": "Failed to load events. $t(errors.contactAdmin)",
86
+ "events.openQuota": "Open",
87
+ "events.signupCount": "Signups:",
88
+ "events.title": "Events",
89
+ "signupState.disabled": "You cannot sign up for this event.",
90
+ "signupState.notOpened": "Signup opens on {{date}}.",
91
+ "signupState.notOpened.short": "Opens on {{date}}.",
92
+ "signupState.open": "Signup open until {{date}}.",
93
+ "signupState.open.short": "Until {{date}}.",
94
+ "signupState.closed": "The signup for this event has closed at {{date}}.",
95
+ "signupState.closed.short": "Closed on {{date}}.",
96
+ "singleEvent.editEvent": "Edit",
97
+ "singleEvent.info.category": "Category:",
98
+ "singleEvent.info.date": "Date:",
99
+ "singleEvent.info.endDate": "Ends:",
100
+ "singleEvent.info.facebookEvent": "Facebook event:",
101
+ "singleEvent.info.location": "Location:",
102
+ "singleEvent.info.price": "Price:",
103
+ "singleEvent.info.startDate": "Starts:",
104
+ "singleEvent.info.website": "Website:",
105
+ "singleEvent.loadError.404.title": "Event not found",
106
+ "singleEvent.loadError.404.description": "The event was not found. It may be too far in the past or deleted, or you might have mistyped the URL.",
107
+ "singleEvent.loadError.default.description": "Failed to load event details. $t(errors.contactAdmin)",
108
+ "singleEvent.quotaCounts.openQuota": "Open quota",
109
+ "singleEvent.quotaCounts.queue": "In queue: {{count}}",
110
+ "singleEvent.quotaCounts.title": "Signups",
111
+ "singleEvent.quotaCounts.unlimited": "Unlimited",
112
+ "singleEvent.returnToEvents": "Back",
113
+ "singleEvent.signupButton.singleQuota": "Sign up now",
114
+ "singleEvent.signupButton": "Sign up: {{quota}}",
115
+ "singleEvent.signupButton.preview": "Preview signup form",
116
+ "singleEvent.signupButtons.title": "Sign up",
117
+ "singleEvent.signups.emptyQuota": "No signups.",
118
+ "singleEvent.signups.quotaTitle.in-open": "Open quota",
119
+ "singleEvent.signups.quotaTitle.in-queue": "In queue",
120
+ "singleEvent.signups.nameHidden": "Hidden",
121
+ "singleEvent.signups.position": "Position",
122
+ "singleEvent.signups.name": "Name",
123
+ "singleEvent.signups.quota": "Quota",
124
+ "singleEvent.signups.signupTime": "Signup time",
125
+ "singleEvent.signups.title": "Signups",
126
+ "singleEvent.signups.unconfirmed": "Unconfirmed",
127
+ "singleEvent.signupInProgress": "Signup in progress",
128
+ "singleEvent.signupError.NoSuchQuota.description": "The quota you chose has been deleted.",
129
+ "singleEvent.signupError.SignupsClosed.description": "The signup for this event has closed.",
130
+ "singleEvent.signupError.default.description": "Signup creation failed."
131
+ }
132
+ }
@@ -0,0 +1,132 @@
1
+ {
2
+ "public": {
3
+ "dateFormat.locale": "fi-FI",
4
+ "duration.days_one": "{{count}} päivä",
5
+ "duration.days_other": "{{count}} päivää",
6
+ "duration.hours_one": "{{count}} tunti",
7
+ "duration.hours_other": "{{count}} tuntia",
8
+ "duration.mins_one": "{{count}} minuutti",
9
+ "duration.mins_other": "{{count}} minuuttia",
10
+ "duration.secs_one": "{{count}} sekunti",
11
+ "duration.secs_other": "{{count}} sekuntia",
12
+ "editSignup.backToEvent": "Takaisin tapahtumasivulle",
13
+ "editSignup.action.cancel": "Peruuta",
14
+ "editSignup.action.edit": "Päivitä",
15
+ "editSignup.action.save": "Tallenna",
16
+ "editSignup.action.back": "Takaisin",
17
+ "editSignup.delete.action": "Poista ilmoittautuminen",
18
+ "editSignup.delete.action.confirm": "Paina uudelleen varmistukseksi\u2026",
19
+ "editSignup.delete.info1": "Oletko varma, että haluat poistaa ilmoittautumisesi tapahtumaan <1>{{event}}</1>?",
20
+ "editSignup.delete.info2": "Jos poistat ilmoittautumisesi, menetät paikkasi jonossa. Jos muutat mielesi, voit aina ilmoittautua tapahtumaan uudelleen myöhemmin, mutta siirryt silloin jonon hännille.",
21
+ "editSignup.delete.info3": "Tätä toimintoa ei voi perua.",
22
+ "editSignup.editInstructions.email": "Linkki lähetetään myös sähköpostiisi vahvistusviestissä.",
23
+ "editSignup.editInstructions": "Voit muokata ilmoittautumistasi tai poistaa sen myöhemmin tallentamalla tämän sivun URL-osoitteen.",
24
+ "editSignup.loadError.BadEditToken.title": "Virheellinen vahvistuskoodi",
25
+ "editSignup.loadError.BadEditToken.description": "URL-osoitteen vahvistuskoodi on virheellinen. Tarkista, että kirjoitit URL-osoitteen oikein.",
26
+ "editSignup.loadError.404.title": "Ilmoittautumista ei löytynyt",
27
+ "editSignup.loadError.404.description": "Ilmoittautumistasi ei löytynyt. Se saattaa olla jo poistettu.",
28
+ "editSignup.loadError.default.description": "Ilmoittautumisen lataaminen epäonnistui. $t(errors.contactAdmin)",
29
+ "editSignup.fields.email": "Sähköposti",
30
+ "editSignup.fields.email.placeholder": "Sähköposti",
31
+ "editSignup.fields.firstName": "Etunimi",
32
+ "editSignup.fields.firstName.placeholder": "Etunimi",
33
+ "editSignup.fields.lastName": "Sukunimi",
34
+ "editSignup.fields.lastName.placeholder": "Sukunimi",
35
+ "editSignup.fields.select.placeholder": "Valitse\u2026",
36
+ "editSignup.namePublic": "Näytä nimi julkisessa osallistujalistassa",
37
+ "editSignup.position.openQuota": "Olet avoimessa kiintiössä sijalla {{position}}.",
38
+ "editSignup.position.queue": "Olet jonossa sijalla {{position}}.",
39
+ "editSignup.position.quota": "Olet kiintiössä {{quota}} sijalla {{position}}.",
40
+ "editSignup.editable.unconfirmed": "Ilmoittautumisesi on voimassa vielä {{duration}}. Tallenna lomake, jotta se ei vanhene.",
41
+ "editSignup.editable.confirmed": "Muokkausaikaa jäljellä: {{duration}}",
42
+ "editSignup.editable.closed": "Ilmoittautumistasi ei voi enää muokata tai perua, koska tapahtuman ilmoittautuminen on sulkeutunut.",
43
+ "editSignup.publicQuestion": "Tämän kentän vastaukset ovat julkisia.",
44
+ "editSignup.status.delete": "Ilmoittautumista poistetaan",
45
+ "editSignup.status.deleteSuccess": "Ilmoittautumisesi poistettiin onnistuneesti.",
46
+ "editSignup.status.edit": "Tallennetaan muutoksia",
47
+ "editSignup.status.editSuccess": "Muokkaus onnistui",
48
+ "editSignup.status.signup": "Tallennetaan ilmoittautumista",
49
+ "editSignup.status.signupSuccess": "Ilmoittautuminen onnistui",
50
+ "editSignup.deleteError.SignupsClosed.description": "Tapahtuman ilmoittautuminen on sulkeutunut, joten ilmoittautumistasi ei voitu enää poistaa.",
51
+ "editSignup.deleteError.NoSuchSignup.description": "Ilmoittautumistasi on jo poistettu.",
52
+ "editSignup.deleteError.default.description": "Poisto epäonnistui.",
53
+ "editSignup.editError.SignupsClosed.description": "Tapahtuman ilmoittautuminen on sulkeutunut, joten muutoksiasi ei voitu enää tallentaa.",
54
+ "editSignup.editError.NoSuchSignup.description": "Ilmoittautumistasi ei löytynyt. Se saattaa olla jo poistettu.",
55
+ "editSignup.editError.400.description": "Muokkaus epäonnistui. Tarkista, että kaikki pakolliset kentät on täytetty ja yritä uudestaan.",
56
+ "editSignup.editError.default.description": "Muokkaus epäonnistui.",
57
+ "editSignup.signupError.SignupsClosed.description": "Tapahtuman ilmoittautuminen on sulkeutunut, joten ilmoittautumistasi ei voitu enää tallentaa.",
58
+ "editSignup.signupError.NoSuchSignup.description": "Ilmoittautumistasi ei löytynyt. Se saattaa olla jo poistettu.",
59
+ "editSignup.signupError.400.description": "Ilmoittautuminen epäonnistui. Tarkista, että kaikki pakolliset kentät on täytetty ja yritä uudestaan.",
60
+ "editSignup.signupError.default.description": "Ilmoittautuminen epäonnistui.",
61
+ "editSignup.fieldError.missing": "Tämä kenttä on pakollinen.",
62
+ "editSignup.fieldError.wrongType": "Kentän vastaus on väärää tyyppiä. Kokeile päivittää sivu.",
63
+ "editSignup.fieldError.tooLong": "Kentän vastaus on liian pitkä.",
64
+ "editSignup.fieldError.invalidEmail": "Sähköpostiosoite on virheellinen.",
65
+ "editSignup.fieldError.notANumber": "Kentän vastauksen tulee olla numero.",
66
+ "editSignup.fieldError.notAnOption": "Kentän vastaus ei ole sallituissa vaihtoehdoissa. Kokeile päivittää sivu.",
67
+ "editSignup.fieldError": "Kentän vastaus on virheellinen. Kokeile päivittää sivu.",
68
+ "editSignup.title.edit": "Muokkaa ilmoittautumista",
69
+ "editSignup.title.signup": "Ilmoittaudu",
70
+ "editSignup.title.preview": "Esikatsele ilmolomaketta",
71
+ "errors.returnToEvents": "Palaa tapahtumalistaukseen",
72
+ "errors.contactAdmin": "Jos ongelma jatkuu, ota yhteyttä ylläpitäjiin.",
73
+ "errors.default.title": "Hups, jotain meni pieleen",
74
+ "errors.default.description": "Tuntematon virhe. $t(errors.contactAdmin)",
75
+ "errors.InitialSetupNeeded.title": "Käyttöönotto kesken",
76
+ "errors.InitialSetupNeeded.description": "Palvelin vaikuttaa vasta asennetulta. Tämä käyttöliittymä ei tue käyttöönottoa \u2013 ota palvelin käyttöön hallintakäyttöliittymän kautta.",
77
+ "errors.500.description": "Palvelimella tapahtui virhe. $t(errors.contactAdmin)",
78
+ "errors.502.description": "Taustapalvelimeen ei saada yhteyttä. $t(errors.contactAdmin)",
79
+ "errors.503.description": "Taustapalvelimeen ei saada yhteyttä. $t(errors.contactAdmin)",
80
+ "errors.504.description": "Taustapalvelin ei vastaa pyyntöihin. $t(errors.contactAdmin)",
81
+ "events.column.date": "Ajankohta",
82
+ "events.column.name": "Nimi",
83
+ "events.column.signupCount": "Ilmoittautuneita",
84
+ "events.column.signupStatus": "Ilmoittautuminen",
85
+ "events.loadError.default.description": "Tapahtumien lataaminen epäonnistui. $t(errors.contactAdmin)",
86
+ "events.openQuota": "Avoin",
87
+ "events.signupCount": "Ilmoittautuneita:",
88
+ "events.title": "Tapahtumat",
89
+ "signupState.disabled": "Tapahtumaan ei voi ilmoittautua.",
90
+ "signupState.notOpened": "Ilmoittautuminen alkaa {{date}}.",
91
+ "signupState.notOpened.short": "Alkaa {{date}}.",
92
+ "signupState.open": "Ilmoittautuminen auki {{date}} asti.",
93
+ "signupState.open.short": "Auki {{date}} asti.",
94
+ "signupState.closed": "Ilmoittautuminen päättyi {{date}}.",
95
+ "signupState.closed.short": "Päättyi {{date}}.",
96
+ "singleEvent.editEvent": "Muokkaa",
97
+ "singleEvent.info.category": "Kategoria:",
98
+ "singleEvent.info.date": "Ajankohta:",
99
+ "singleEvent.info.endDate": "Loppuu:",
100
+ "singleEvent.info.facebookEvent": "Facebook-tapahtuma:",
101
+ "singleEvent.info.location": "Sijainti:",
102
+ "singleEvent.info.price": "Hinta:",
103
+ "singleEvent.info.startDate": "Alkaa:",
104
+ "singleEvent.info.website": "Kotisivut:",
105
+ "singleEvent.loadError.404.title": "Tapahtumaa ei löytynyt",
106
+ "singleEvent.loadError.404.description": "Tapahtumaa ei löytynyt. Se saattaa olla menneisyydessä tai poistettu, tai olet ehkä kirjoittanut URL-osoitteen väärin.",
107
+ "singleEvent.loadError.default.description": "Tapahtuman lataaminen epäonnistui. $t(errors.contactAdmin)",
108
+ "singleEvent.quotaCounts.openQuota": "Avoin kiintiö",
109
+ "singleEvent.quotaCounts.queue": "Jonossa: {{count}}",
110
+ "singleEvent.quotaCounts.title": "Ilmoittautuneet",
111
+ "singleEvent.quotaCounts.unlimited": "Rajaton",
112
+ "singleEvent.returnToEvents": "Takaisin",
113
+ "singleEvent.signupButton.singleQuota": "Ilmoittaudu nyt",
114
+ "singleEvent.signupButton": "Ilmoittaudu: {{quota}}",
115
+ "singleEvent.signupButton.preview": "Esikatsele ilmolomaketta",
116
+ "singleEvent.signupButtons.title": "Ilmoittautuminen",
117
+ "singleEvent.signups.emptyQuota": "Ei ilmoittautumisia.",
118
+ "singleEvent.signups.quotaTitle.in-open": "Avoin kiintiö",
119
+ "singleEvent.signups.quotaTitle.in-queue": "Jonossa",
120
+ "singleEvent.signups.nameHidden": "Piilotettu",
121
+ "singleEvent.signups.position": "Sija",
122
+ "singleEvent.signups.name": "Nimi",
123
+ "singleEvent.signups.quota": "Kiintiö",
124
+ "singleEvent.signups.signupTime": "Ilmoittautumisaika",
125
+ "singleEvent.signups.title": "Ilmoittautuneet",
126
+ "singleEvent.signups.unconfirmed": "Vahvistamatta",
127
+ "singleEvent.signupInProgress": "Ilmoittautuminen käynnissä",
128
+ "singleEvent.signupError.NoSuchQuota.description": "Valitsemasi kiintiö on poistettu.",
129
+ "singleEvent.signupError.SignupsClosed.description": "Tapahtuman ilmoittautuminen on sulkeutunut.",
130
+ "singleEvent.signupError.default.description": "Ilmoittautuminen epäonnistui."
131
+ }
132
+ }