Skip to content

Commit 6f2682c

Browse files
Request Permissions mechanism improvements (#75)
* Add 'done' field for request form in DB * Add timestamp of current request and bump patch number * Add request type to request document and allow multiple requests * Fix coding style * Bump patch number and fix coding style * Fix review comments * Bump version Co-authored-by: Ioana Alexandru <ioanaa.alexandru98@gmail.com>
1 parent d0af893 commit 6f2682c

File tree

16 files changed

+376
-276
lines changed

16 files changed

+376
-276
lines changed

ios/Podfile.lock

Lines changed: 255 additions & 213 deletions
Large diffs are not rendered by default.

ios/Runner.xcodeproj/project.pbxproj

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88

99
/* Begin PBXBuildFile section */
1010
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
11-
151803A2442DD69DCBBE7F00 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6047ACBF1B75C3FD6F95F0D2 /* Pods_Runner.framework */; };
1211
19E6F50B23F5AB7E00B39D95 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 19E6F50A23F5AB7E00B39D95 /* GoogleService-Info.plist */; };
1312
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
1413
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
1514
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
1615
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
1716
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
17+
FBBA8F9A35A44F8102D5EAEF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05B57303C999713E350DFBFF /* Pods_Runner.framework */; };
1818
/* End PBXBuildFile section */
1919

2020
/* Begin PBXCopyFilesBuildPhase section */
@@ -31,32 +31,32 @@
3131
/* End PBXCopyFilesBuildPhase section */
3232

3333
/* Begin PBXFileReference section */
34+
05B57303C999713E350DFBFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
3435
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
3536
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
3637
19E6F50A23F5AB7E00B39D95 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
37-
27A0B885ED0100362864369D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
38+
31C476B79716C570ABA13B6C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
3839
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
39-
6047ACBF1B75C3FD6F95F0D2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
40+
429BEEBA566683292754D771 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
41+
70587A55630AD8CC3382BF34 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
4042
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
4143
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
4244
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
43-
8FD158BF6838EC9172E0B63C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
4445
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
4546
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
4647
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
4748
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
4849
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
4950
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
5051
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
51-
CBCFF1FC2921391693903AA7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
5252
/* End PBXFileReference section */
5353

5454
/* Begin PBXFrameworksBuildPhase section */
5555
97C146EB1CF9000F007C117D /* Frameworks */ = {
5656
isa = PBXFrameworksBuildPhase;
5757
buildActionMask = 2147483647;
5858
files = (
59-
151803A2442DD69DCBBE7F00 /* Pods_Runner.framework in Frameworks */,
59+
FBBA8F9A35A44F8102D5EAEF /* Pods_Runner.framework in Frameworks */,
6060
);
6161
runOnlyForDeploymentPostprocessing = 0;
6262
};
@@ -66,9 +66,9 @@
6666
0F56ECAB836BA28A28176D92 /* Pods */ = {
6767
isa = PBXGroup;
6868
children = (
69-
CBCFF1FC2921391693903AA7 /* Pods-Runner.debug.xcconfig */,
70-
27A0B885ED0100362864369D /* Pods-Runner.release.xcconfig */,
71-
8FD158BF6838EC9172E0B63C /* Pods-Runner.profile.xcconfig */,
69+
429BEEBA566683292754D771 /* Pods-Runner.debug.xcconfig */,
70+
70587A55630AD8CC3382BF34 /* Pods-Runner.release.xcconfig */,
71+
31C476B79716C570ABA13B6C /* Pods-Runner.profile.xcconfig */,
7272
);
7373
path = Pods;
7474
sourceTree = "<group>";
@@ -91,7 +91,7 @@
9191
97C146F01CF9000F007C117D /* Runner */,
9292
97C146EF1CF9000F007C117D /* Products */,
9393
0F56ECAB836BA28A28176D92 /* Pods */,
94-
FE67460CBA1E18E8DD42F4A3 /* Frameworks */,
94+
D6374C883D6829220B9C29F4 /* Frameworks */,
9595
);
9696
sourceTree = "<group>";
9797
};
@@ -127,10 +127,10 @@
127127
name = "Supporting Files";
128128
sourceTree = "<group>";
129129
};
130-
FE67460CBA1E18E8DD42F4A3 /* Frameworks */ = {
130+
D6374C883D6829220B9C29F4 /* Frameworks */ = {
131131
isa = PBXGroup;
132132
children = (
133-
6047ACBF1B75C3FD6F95F0D2 /* Pods_Runner.framework */,
133+
05B57303C999713E350DFBFF /* Pods_Runner.framework */,
134134
);
135135
name = Frameworks;
136136
sourceTree = "<group>";
@@ -142,14 +142,14 @@
142142
isa = PBXNativeTarget;
143143
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
144144
buildPhases = (
145-
887B6388E6F0A493E9ECA89D /* [CP] Check Pods Manifest.lock */,
145+
3CD3D192A3A8E058719A1C7E /* [CP] Check Pods Manifest.lock */,
146146
9740EEB61CF901F6004384FC /* Run Script */,
147147
97C146EA1CF9000F007C117D /* Sources */,
148148
97C146EB1CF9000F007C117D /* Frameworks */,
149149
97C146EC1CF9000F007C117D /* Resources */,
150150
9705A1C41CF9048500538489 /* Embed Frameworks */,
151151
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
152-
DDC0F4BFA3CF2DE9E611D987 /* [CP] Embed Pods Frameworks */,
152+
4C12723D319BC541FA394731 /* [CP] Embed Pods Frameworks */,
153153
);
154154
buildRules = (
155155
);
@@ -225,7 +225,7 @@
225225
shellPath = /bin/sh;
226226
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
227227
};
228-
887B6388E6F0A493E9ECA89D /* [CP] Check Pods Manifest.lock */ = {
228+
3CD3D192A3A8E058719A1C7E /* [CP] Check Pods Manifest.lock */ = {
229229
isa = PBXShellScriptBuildPhase;
230230
buildActionMask = 2147483647;
231231
files = (
@@ -247,21 +247,7 @@
247247
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
248248
showEnvVarsInLog = 0;
249249
};
250-
9740EEB61CF901F6004384FC /* Run Script */ = {
251-
isa = PBXShellScriptBuildPhase;
252-
buildActionMask = 2147483647;
253-
files = (
254-
);
255-
inputPaths = (
256-
);
257-
name = "Run Script";
258-
outputPaths = (
259-
);
260-
runOnlyForDeploymentPostprocessing = 0;
261-
shellPath = /bin/sh;
262-
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
263-
};
264-
DDC0F4BFA3CF2DE9E611D987 /* [CP] Embed Pods Frameworks */ = {
250+
4C12723D319BC541FA394731 /* [CP] Embed Pods Frameworks */ = {
265251
isa = PBXShellScriptBuildPhase;
266252
buildActionMask = 2147483647;
267253
files = (
@@ -311,6 +297,20 @@
311297
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
312298
showEnvVarsInLog = 0;
313299
};
300+
9740EEB61CF901F6004384FC /* Run Script */ = {
301+
isa = PBXShellScriptBuildPhase;
302+
buildActionMask = 2147483647;
303+
files = (
304+
);
305+
inputPaths = (
306+
);
307+
name = "Run Script";
308+
outputPaths = (
309+
);
310+
runOnlyForDeploymentPostprocessing = 0;
311+
shellPath = /bin/sh;
312+
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
313+
};
314314
/* End PBXShellScriptBuildPhase section */
315315

316316
/* Begin PBXSourcesBuildPhase section */

lib/generated/intl/messages_en.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ class MessageLookup extends MessageLookupByLibrary {
159159
"messageAccountDeleted" : MessageLookupByLibrary.simpleMessage("Account deleted successfully."),
160160
"messageAddCustomWebsite" : MessageLookupByLibrary.simpleMessage("Try adding a custom website."),
161161
"messageAgreePermissions" : MessageLookupByLibrary.simpleMessage("I will only upload information that is correct and accurate, to the best of my knowledge. I understand that submitting erroneous or offensive information on purpose will lead to my editing permissions being permanently revoked."),
162+
"messageAnnouncedOnMail" : MessageLookupByLibrary.simpleMessage("You will receive a mail confirmation if your request is approved."),
162163
"messageAskPermissionToEdit" : MessageLookupByLibrary.simpleMessage("Why do you want edit permissions for ACS UPB Mobile?"),
163164
"messageButtonAbove" : MessageLookupByLibrary.simpleMessage("button above"),
164165
"messageCannotBeUndone" : MessageLookupByLibrary.simpleMessage("This action cannot be undone."),
@@ -181,7 +182,7 @@ class MessageLookup extends MessageLookupByLibrary {
181182
"messageNewUser" : MessageLookupByLibrary.simpleMessage("New user?"),
182183
"messageNoClassesYet" : MessageLookupByLibrary.simpleMessage("You have not added any classes yet."),
183184
"messageNotLoggedIn" : MessageLookupByLibrary.simpleMessage("You need to be logged in to perform this action."),
184-
"messageRequestAlreadyExists" : MessageLookupByLibrary.simpleMessage("You have already submitted a request. If you want to overwrite it, please press \'Send\'."),
185+
"messageRequestAlreadyExists" : MessageLookupByLibrary.simpleMessage("You have already submitted a request. If you want to add another one, please press \'Send\'."),
185186
"messageRequestHasBeenSent" : MessageLookupByLibrary.simpleMessage("The request has been sent succesfully."),
186187
"messageResetPassword" : MessageLookupByLibrary.simpleMessage("Enter your e-mai in order to receive instructions on how to reset your password."),
187188
"messageShortcutDeleted" : MessageLookupByLibrary.simpleMessage("Shortcut deleted successfully."),

lib/generated/intl/messages_ro.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ class MessageLookup extends MessageLookupByLibrary {
159159
"messageAccountDeleted" : MessageLookupByLibrary.simpleMessage("Contul a fost șters cu succes."),
160160
"messageAddCustomWebsite" : MessageLookupByLibrary.simpleMessage("Încercați să adăugați un website."),
161161
"messageAgreePermissions" : MessageLookupByLibrary.simpleMessage("Voi încărca doar informații corecte si precise. Înțeleg că încărcarea informațiilor eronate sau ofensatoare în mod intenționat va conduce la blocarea permisiunilor mele permanent."),
162+
"messageAnnouncedOnMail" : MessageLookupByLibrary.simpleMessage("Veți primi o confirmare pe mail dacă vi se acceptă cererea."),
162163
"messageAskPermissionToEdit" : MessageLookupByLibrary.simpleMessage("De ce dorești să primești permisiuni de editare în ACS UPB Mobile?"),
163164
"messageButtonAbove" : MessageLookupByLibrary.simpleMessage("de mai sus."),
164165
"messageCannotBeUndone" : MessageLookupByLibrary.simpleMessage("Această acțiune nu este reversibilă."),
@@ -181,7 +182,7 @@ class MessageLookup extends MessageLookupByLibrary {
181182
"messageNewUser" : MessageLookupByLibrary.simpleMessage("Utilizator nou?"),
182183
"messageNoClassesYet" : MessageLookupByLibrary.simpleMessage("Nu ați adăugat nici o materie încă."),
183184
"messageNotLoggedIn" : MessageLookupByLibrary.simpleMessage("Trebuie să fiți autentificat pentru a realiza această acțiune."),
184-
"messageRequestAlreadyExists" : MessageLookupByLibrary.simpleMessage("Ați trimis deja o cerere. Daca doriți să o suprascrieți, vă rugăm sa apasați \'Salvare\'."),
185+
"messageRequestAlreadyExists" : MessageLookupByLibrary.simpleMessage("Ați trimis deja o cerere. Daca doriți să adăugați una nouă, vă rugăm sa apasați \'Salvare\'."),
185186
"messageRequestHasBeenSent" : MessageLookupByLibrary.simpleMessage("Cererea a fost transmisă cu succes"),
186187
"messageResetPassword" : MessageLookupByLibrary.simpleMessage("Introduceți mail-ul pentru a primi instrucțiuni de resetare a parolei."),
187188
"messageShortcutDeleted" : MessageLookupByLibrary.simpleMessage("Scurtătura a fost ștearsă cu succes."),

lib/generated/l10n.dart

Lines changed: 12 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/l10n/intl_en.arb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@
203203
"messageEmailNotVerifiedToPerformAction": "Your account needs to be verified to perform this action.",
204204
"messageAccountCreated": "Account created successfully.",
205205
"messageAccountDeleted": "Account deleted successfully.",
206+
"messageAnnouncedOnMail": "You will receive a mail confirmation if your request is approved.",
206207
"messageCheckEmailVerification": "Please check your email for account verification.",
207208
"messageResetPassword": "Enter your e-mai in order to receive instructions on how to reset your password.",
208209
"messageDeleteAccount": "Are you sure you want to delete your account?",
@@ -227,7 +228,7 @@
227228
"messageButtonAbove": "button above",
228229
"messageAskPermissionToEdit": "Why do you want edit permissions for ACS UPB Mobile?",
229230
"messageRequestHasBeenSent": "The request has been sent succesfully.",
230-
"messageRequestAlreadyExists": "You have already submitted a request. If you want to overwrite it, please press 'Send'.",
231+
"messageRequestAlreadyExists": "You have already submitted a request. If you want to add another one, please press 'Send'.",
231232
"messageIAgreeToThe": "I agree to the ",
232233
"messageEditProfileSuccess": "Profile updated successfully.",
233234
"messageTapForMoreInfo": "Tap for more info",

lib/l10n/intl_ro.arb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@
203203
"messageEmailNotVerifiedToPerformAction": "Contul trebuie să fie verificat pentru a realiza această acțiune.",
204204
"messageAccountCreated": "Contul a fost creat cu succes.",
205205
"messageAccountDeleted": "Contul a fost șters cu succes.",
206+
"messageAnnouncedOnMail": "Veți primi o confirmare pe mail dacă vi se acceptă cererea.",
206207
"messageCheckEmailVerification": "Verificați-vă mail-ul pentru confirmarea contului.",
207208
"messageResetPassword": "Introduceți mail-ul pentru a primi instrucțiuni de resetare a parolei.",
208209
"messageDeleteAccount": "Sunteți sigur că doriți să ștergeți contul?",
@@ -227,7 +228,7 @@
227228
"messageButtonAbove": "de mai sus.",
228229
"messageAskPermissionToEdit": "De ce dorești să primești permisiuni de editare în ACS UPB Mobile?",
229230
"messageRequestHasBeenSent": "Cererea a fost transmisă cu succes",
230-
"messageRequestAlreadyExists": "Ați trimis deja o cerere. Daca doriți să o suprascrieți, vă rugăm sa apasați 'Salvare'.",
231+
"messageRequestAlreadyExists": "Ați trimis deja o cerere. Daca doriți să adăugați una nouă, vă rugăm sa apasați 'Salvare'.",
231232
"messageIAgreeToThe": "Sunt de acord cu ",
232233
"messageEditProfileSuccess": "Profilul a fost actualizat cu succes.",
233234
"messageTapForMoreInfo": "Apasă pentru mai multe informații",

lib/pages/classes/service/class_provider.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:acs_upb_mobile/authentication/model/user.dart';
22
import 'package:acs_upb_mobile/generated/l10n.dart';
33
import 'package:acs_upb_mobile/pages/classes/model/class.dart';
44
import 'package:acs_upb_mobile/pages/filter/model/filter.dart';
5+
import 'package:acs_upb_mobile/resources/utils.dart';
56
import 'package:acs_upb_mobile/widgets/toast.dart';
67
import 'package:cloud_firestore/cloud_firestore.dart';
78
import 'package:flutter/material.dart';
@@ -29,7 +30,7 @@ extension ShortcutTypeExtension on ShortcutType {
2930
extension ShortcutExtension on Shortcut {
3031
Map<String, dynamic> toData() {
3132
return {
32-
'type': type.toString().split('.').last,
33+
'type': type.toShortString(),
3334
'name': name,
3435
'link': link,
3536
'addedBy': ownerUid

0 commit comments

Comments
 (0)