@dev-crew-berlin/enter-js-utils 0.82.1 → 0.84.0

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.
@@ -3,6 +3,7 @@ import { Checkin } from './checkin';
3
3
  import { Checkins } from './checkins';
4
4
  import { FieldValue } from './field-value';
5
5
  import { Rsvp } from './rsvp';
6
+ import { AttendeeUpdatedEvent } from './event';
6
7
  export type AttendeeJSON = components['schemas']['PublicAttendee-Output'];
7
8
  type AttendeeJSONInput = components['schemas']['PublicAttendee-Input'];
8
9
  export declare class Attendee {
@@ -51,6 +52,15 @@ export declare class Attendee {
51
52
  branchName: string;
52
53
  checkinId: string;
53
54
  }): Attendee;
55
+ withUpdates(updates: AttendeeUpdatedEvent['updates']): Attendee;
56
+ getFieldString(fieldKey: string): string;
57
+ /**
58
+ * @deprecated Use `getFieldString` instead
59
+ */
54
60
  getFieldValueString(fieldKey: string): string;
61
+ getFieldNumber(fieldKey: string): number | undefined;
62
+ getFieldNumber(fieldKey: string, fallback: number): number;
63
+ getFieldFlag(fieldKey: string): boolean | undefined;
64
+ getFieldFlag(fieldKey: string, fallback: boolean): boolean;
55
65
  }
56
66
  export {};
@@ -124,8 +124,68 @@ export class Attendee {
124
124
  newAttendee.checkin.set(args.branchName, mergedCheckins);
125
125
  return newAttendee;
126
126
  }
127
- getFieldValueString(fieldKey) {
127
+ withUpdates(updates) {
128
+ const newAttendee = new Attendee(this.toJSON());
129
+ if (updates.userdata) {
130
+ newAttendee.userdata = new Map([...this.userdata, ...Object.entries(updates.userdata)]);
131
+ }
132
+ if (updates.rsvp) {
133
+ const rsvpUpdates = Object.entries(updates.rsvp).map(([branchName, rsvpJSON]) => [branchName, rsvpJSON ? new Rsvp(rsvpJSON) : null]);
134
+ newAttendee.rsvp = new Map([...this.rsvp, ...rsvpUpdates]);
135
+ }
136
+ if (updates.tags) {
137
+ newAttendee.tags = this.tags.union(new Set(updates.tags));
138
+ }
139
+ if (updates.deletedTags) {
140
+ newAttendee.tags = newAttendee.tags.difference(new Set(updates.deletedTags));
141
+ }
142
+ if (updates.branches) {
143
+ newAttendee.branches = this.branches.union(new Set(updates.branches));
144
+ }
145
+ if (updates.deletedBranches) {
146
+ newAttendee.branches = newAttendee.branches.difference(new Set(updates.deletedBranches));
147
+ }
148
+ if (updates.companions) {
149
+ // TODO: updates.companions type is wrong
150
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
151
+ // @ts-ignore
152
+ newAttendee.companions = updates.companions;
153
+ }
154
+ if (updates.language) {
155
+ newAttendee.language = updates.language;
156
+ }
157
+ if (updates.payment) {
158
+ newAttendee.payment = updates.payment;
159
+ }
160
+ return newAttendee;
161
+ }
162
+ getFieldString(fieldKey) {
128
163
  const fieldValue = this.userdata.get(fieldKey);
129
164
  return fieldValue?.toString() ?? '';
130
165
  }
166
+
167
+ /**
168
+ * @deprecated Use `getFieldString` instead
169
+ */
170
+ getFieldValueString(fieldKey) {
171
+ return this.getFieldString(fieldKey);
172
+ }
173
+ getFieldNumber(fieldKey, fallback) {
174
+ const fieldValue = this.userdata.get(fieldKey);
175
+ switch (typeof fieldValue) {
176
+ case 'number':
177
+ return fieldValue;
178
+ case 'string':
179
+ // eslint-disable-next-line no-case-declarations
180
+ const parsed = parseFloat(fieldValue);
181
+ return Number.isNaN(parsed) ? fallback : parsed;
182
+ default:
183
+ return fallback;
184
+ }
185
+ }
186
+ getFieldFlag(fieldKey, fallback) {
187
+ const fieldValue = this.userdata.get(fieldKey);
188
+ if (typeof fieldValue === 'boolean') return fieldValue;
189
+ return fallback;
190
+ }
131
191
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dev-crew-berlin/enter-js-utils",
3
- "version": "0.82.1",
3
+ "version": "0.84.0",
4
4
  "description": "utils such as vaildation and other helpers to work with data from the enter app",
5
5
  "files": [
6
6
  "dist",