mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-05-11 14:49:32 -05:00
[client] Rename User.displayName => User.name
This commit is contained in:
@@ -74,7 +74,7 @@ class ResourceShareAction extends ResourceAction with JsonApiAction {
|
||||
userEmail: user.email,
|
||||
permission: permission,
|
||||
modified: DateTime.now(),
|
||||
description: 'Sharing $resourceName with ${user.displayName}',
|
||||
description: 'Sharing $resourceName with ${user.name}',
|
||||
);
|
||||
|
||||
static ResourceShareAction fromMap(Map<String, dynamic> map) {
|
||||
|
||||
@@ -20,12 +20,12 @@ class UserInviteAction extends PhylumAction with JsonApiAction {
|
||||
@override
|
||||
Map<String, dynamic>? get requestBody => {
|
||||
'email': email,
|
||||
'display_name': displayName,
|
||||
'name': userName,
|
||||
};
|
||||
|
||||
@override
|
||||
List<LocalChange> get localChanges => [
|
||||
CreateUserChange(localId: localId, email: email, displayName: displayName),
|
||||
CreateUserChange(localId: localId, email: email, name: userName),
|
||||
];
|
||||
|
||||
@override
|
||||
@@ -35,24 +35,24 @@ class UserInviteAction extends PhylumAction with JsonApiAction {
|
||||
Map<String, dynamic> get props => {
|
||||
'localId': localId,
|
||||
'email': email,
|
||||
'displayName': displayName,
|
||||
'userName': userName,
|
||||
};
|
||||
|
||||
final int localId;
|
||||
final String email;
|
||||
final String displayName;
|
||||
final String userName;
|
||||
|
||||
UserInviteAction({
|
||||
required this.localId,
|
||||
required this.email,
|
||||
required this.displayName,
|
||||
required this.userName,
|
||||
});
|
||||
|
||||
static UserInviteAction fromMap(Map<String, dynamic> map) {
|
||||
return UserInviteAction(
|
||||
localId: map['localId'],
|
||||
email: map['email'],
|
||||
displayName: map['displayName'],
|
||||
userName: map['userName'],
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ class CreateUserChange extends LocalChange<User> {
|
||||
String get objectId => localId.toString();
|
||||
final int localId;
|
||||
final String email;
|
||||
final String displayName;
|
||||
final String name;
|
||||
|
||||
@override
|
||||
String get description => 'Creating';
|
||||
@@ -14,11 +14,11 @@ class CreateUserChange extends LocalChange<User> {
|
||||
const CreateUserChange({
|
||||
required this.localId,
|
||||
required this.email,
|
||||
required this.displayName,
|
||||
required this.name,
|
||||
});
|
||||
|
||||
@override
|
||||
User? apply(User? data) {
|
||||
return User(id: localId, email: email, displayName: displayName);
|
||||
return User(id: localId, email: email, name: name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ class AppDatabase extends _$AppDatabase {
|
||||
AppDatabase.fromExecutor({required this.accountId, required QueryExecutor executor}) : super(executor);
|
||||
|
||||
@override
|
||||
int get schemaVersion => 6;
|
||||
int get schemaVersion => 7;
|
||||
|
||||
@override
|
||||
MigrationStrategy get migration => MigrationStrategy(
|
||||
@@ -54,6 +54,10 @@ class AppDatabase extends _$AppDatabase {
|
||||
await m.drop(resources);
|
||||
await m.create(resources);
|
||||
}
|
||||
if (from < 7) {
|
||||
await m.drop(users);
|
||||
await m.create(users);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
@@ -20,15 +20,14 @@ class Users extends Table with TableInfo<Users, User> {
|
||||
type: DriftSqlType.string,
|
||||
requiredDuringInsert: true,
|
||||
$customConstraints: 'NOT NULL');
|
||||
static const VerificationMeta _displayNameMeta =
|
||||
const VerificationMeta('displayName');
|
||||
late final GeneratedColumn<String> displayName = GeneratedColumn<String>(
|
||||
'display_name', aliasedName, false,
|
||||
static const VerificationMeta _nameMeta = const VerificationMeta('name');
|
||||
late final GeneratedColumn<String> name = GeneratedColumn<String>(
|
||||
'name', aliasedName, false,
|
||||
type: DriftSqlType.string,
|
||||
requiredDuringInsert: true,
|
||||
$customConstraints: 'NOT NULL');
|
||||
@override
|
||||
List<GeneratedColumn> get $columns => [id, email, displayName];
|
||||
List<GeneratedColumn> get $columns => [id, email, name];
|
||||
@override
|
||||
String get aliasedName => _alias ?? actualTableName;
|
||||
@override
|
||||
@@ -48,13 +47,11 @@ class Users extends Table with TableInfo<Users, User> {
|
||||
} else if (isInserting) {
|
||||
context.missing(_emailMeta);
|
||||
}
|
||||
if (data.containsKey('display_name')) {
|
||||
if (data.containsKey('name')) {
|
||||
context.handle(
|
||||
_displayNameMeta,
|
||||
displayName.isAcceptableOrUnknown(
|
||||
data['display_name']!, _displayNameMeta));
|
||||
_nameMeta, name.isAcceptableOrUnknown(data['name']!, _nameMeta));
|
||||
} else if (isInserting) {
|
||||
context.missing(_displayNameMeta);
|
||||
context.missing(_nameMeta);
|
||||
}
|
||||
return context;
|
||||
}
|
||||
@@ -69,8 +66,8 @@ class Users extends Table with TableInfo<Users, User> {
|
||||
.read(DriftSqlType.int, data['${effectivePrefix}id'])!,
|
||||
email: attachedDatabase.typeMapping
|
||||
.read(DriftSqlType.string, data['${effectivePrefix}email'])!,
|
||||
displayName: attachedDatabase.typeMapping
|
||||
.read(DriftSqlType.string, data['${effectivePrefix}display_name'])!,
|
||||
name: attachedDatabase.typeMapping
|
||||
.read(DriftSqlType.string, data['${effectivePrefix}name'])!,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -86,15 +83,14 @@ class Users extends Table with TableInfo<Users, User> {
|
||||
class User extends DataClass implements Insertable<User> {
|
||||
final int id;
|
||||
final String email;
|
||||
final String displayName;
|
||||
const User(
|
||||
{required this.id, required this.email, required this.displayName});
|
||||
final String name;
|
||||
const User({required this.id, required this.email, required this.name});
|
||||
@override
|
||||
Map<String, Expression> toColumns(bool nullToAbsent) {
|
||||
final map = <String, Expression>{};
|
||||
map['id'] = Variable<int>(id);
|
||||
map['email'] = Variable<String>(email);
|
||||
map['display_name'] = Variable<String>(displayName);
|
||||
map['name'] = Variable<String>(name);
|
||||
return map;
|
||||
}
|
||||
|
||||
@@ -102,7 +98,7 @@ class User extends DataClass implements Insertable<User> {
|
||||
return UsersCompanion(
|
||||
id: Value(id),
|
||||
email: Value(email),
|
||||
displayName: Value(displayName),
|
||||
name: Value(name),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -112,7 +108,7 @@ class User extends DataClass implements Insertable<User> {
|
||||
return User(
|
||||
id: serializer.fromJson<int>(json['id']),
|
||||
email: serializer.fromJson<String>(json['email']),
|
||||
displayName: serializer.fromJson<String>(json['display_name']),
|
||||
name: serializer.fromJson<String>(json['name']),
|
||||
);
|
||||
}
|
||||
@override
|
||||
@@ -121,21 +117,20 @@ class User extends DataClass implements Insertable<User> {
|
||||
return <String, dynamic>{
|
||||
'id': serializer.toJson<int>(id),
|
||||
'email': serializer.toJson<String>(email),
|
||||
'display_name': serializer.toJson<String>(displayName),
|
||||
'name': serializer.toJson<String>(name),
|
||||
};
|
||||
}
|
||||
|
||||
User copyWith({int? id, String? email, String? displayName}) => User(
|
||||
User copyWith({int? id, String? email, String? name}) => User(
|
||||
id: id ?? this.id,
|
||||
email: email ?? this.email,
|
||||
displayName: displayName ?? this.displayName,
|
||||
name: name ?? this.name,
|
||||
);
|
||||
User copyWithCompanion(UsersCompanion data) {
|
||||
return User(
|
||||
id: data.id.present ? data.id.value : this.id,
|
||||
email: data.email.present ? data.email.value : this.email,
|
||||
displayName:
|
||||
data.displayName.present ? data.displayName.value : this.displayName,
|
||||
name: data.name.present ? data.name.value : this.name,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -144,55 +139,55 @@ class User extends DataClass implements Insertable<User> {
|
||||
return (StringBuffer('User(')
|
||||
..write('id: $id, ')
|
||||
..write('email: $email, ')
|
||||
..write('displayName: $displayName')
|
||||
..write('name: $name')
|
||||
..write(')'))
|
||||
.toString();
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(id, email, displayName);
|
||||
int get hashCode => Object.hash(id, email, name);
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
(other is User &&
|
||||
other.id == this.id &&
|
||||
other.email == this.email &&
|
||||
other.displayName == this.displayName);
|
||||
other.name == this.name);
|
||||
}
|
||||
|
||||
class UsersCompanion extends UpdateCompanion<User> {
|
||||
final Value<int> id;
|
||||
final Value<String> email;
|
||||
final Value<String> displayName;
|
||||
final Value<String> name;
|
||||
const UsersCompanion({
|
||||
this.id = const Value.absent(),
|
||||
this.email = const Value.absent(),
|
||||
this.displayName = const Value.absent(),
|
||||
this.name = const Value.absent(),
|
||||
});
|
||||
UsersCompanion.insert({
|
||||
this.id = const Value.absent(),
|
||||
required String email,
|
||||
required String displayName,
|
||||
required String name,
|
||||
}) : email = Value(email),
|
||||
displayName = Value(displayName);
|
||||
name = Value(name);
|
||||
static Insertable<User> custom({
|
||||
Expression<int>? id,
|
||||
Expression<String>? email,
|
||||
Expression<String>? displayName,
|
||||
Expression<String>? name,
|
||||
}) {
|
||||
return RawValuesInsertable({
|
||||
if (id != null) 'id': id,
|
||||
if (email != null) 'email': email,
|
||||
if (displayName != null) 'display_name': displayName,
|
||||
if (name != null) 'name': name,
|
||||
});
|
||||
}
|
||||
|
||||
UsersCompanion copyWith(
|
||||
{Value<int>? id, Value<String>? email, Value<String>? displayName}) {
|
||||
{Value<int>? id, Value<String>? email, Value<String>? name}) {
|
||||
return UsersCompanion(
|
||||
id: id ?? this.id,
|
||||
email: email ?? this.email,
|
||||
displayName: displayName ?? this.displayName,
|
||||
name: name ?? this.name,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -205,8 +200,8 @@ class UsersCompanion extends UpdateCompanion<User> {
|
||||
if (email.present) {
|
||||
map['email'] = Variable<String>(email.value);
|
||||
}
|
||||
if (displayName.present) {
|
||||
map['display_name'] = Variable<String>(displayName.value);
|
||||
if (name.present) {
|
||||
map['name'] = Variable<String>(name.value);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
@@ -216,7 +211,7 @@ class UsersCompanion extends UpdateCompanion<User> {
|
||||
return (StringBuffer('UsersCompanion(')
|
||||
..write('id: $id, ')
|
||||
..write('email: $email, ')
|
||||
..write('displayName: $displayName')
|
||||
..write('name: $name')
|
||||
..write(')'))
|
||||
.toString();
|
||||
}
|
||||
@@ -2350,12 +2345,12 @@ abstract class _$AppDatabase extends GeneratedDatabase {
|
||||
typedef $UsersCreateCompanionBuilder = UsersCompanion Function({
|
||||
Value<int> id,
|
||||
required String email,
|
||||
required String displayName,
|
||||
required String name,
|
||||
});
|
||||
typedef $UsersUpdateCompanionBuilder = UsersCompanion Function({
|
||||
Value<int> id,
|
||||
Value<String> email,
|
||||
Value<String> displayName,
|
||||
Value<String> name,
|
||||
});
|
||||
|
||||
class $UsersFilterComposer extends Composer<_$AppDatabase, Users> {
|
||||
@@ -2372,8 +2367,8 @@ class $UsersFilterComposer extends Composer<_$AppDatabase, Users> {
|
||||
ColumnFilters<String> get email => $composableBuilder(
|
||||
column: $table.email, builder: (column) => ColumnFilters(column));
|
||||
|
||||
ColumnFilters<String> get displayName => $composableBuilder(
|
||||
column: $table.displayName, builder: (column) => ColumnFilters(column));
|
||||
ColumnFilters<String> get name => $composableBuilder(
|
||||
column: $table.name, builder: (column) => ColumnFilters(column));
|
||||
}
|
||||
|
||||
class $UsersOrderingComposer extends Composer<_$AppDatabase, Users> {
|
||||
@@ -2390,8 +2385,8 @@ class $UsersOrderingComposer extends Composer<_$AppDatabase, Users> {
|
||||
ColumnOrderings<String> get email => $composableBuilder(
|
||||
column: $table.email, builder: (column) => ColumnOrderings(column));
|
||||
|
||||
ColumnOrderings<String> get displayName => $composableBuilder(
|
||||
column: $table.displayName, builder: (column) => ColumnOrderings(column));
|
||||
ColumnOrderings<String> get name => $composableBuilder(
|
||||
column: $table.name, builder: (column) => ColumnOrderings(column));
|
||||
}
|
||||
|
||||
class $UsersAnnotationComposer extends Composer<_$AppDatabase, Users> {
|
||||
@@ -2408,8 +2403,8 @@ class $UsersAnnotationComposer extends Composer<_$AppDatabase, Users> {
|
||||
GeneratedColumn<String> get email =>
|
||||
$composableBuilder(column: $table.email, builder: (column) => column);
|
||||
|
||||
GeneratedColumn<String> get displayName => $composableBuilder(
|
||||
column: $table.displayName, builder: (column) => column);
|
||||
GeneratedColumn<String> get name =>
|
||||
$composableBuilder(column: $table.name, builder: (column) => column);
|
||||
}
|
||||
|
||||
class $UsersTableManager extends RootTableManager<
|
||||
@@ -2437,22 +2432,22 @@ class $UsersTableManager extends RootTableManager<
|
||||
updateCompanionCallback: ({
|
||||
Value<int> id = const Value.absent(),
|
||||
Value<String> email = const Value.absent(),
|
||||
Value<String> displayName = const Value.absent(),
|
||||
Value<String> name = const Value.absent(),
|
||||
}) =>
|
||||
UsersCompanion(
|
||||
id: id,
|
||||
email: email,
|
||||
displayName: displayName,
|
||||
name: name,
|
||||
),
|
||||
createCompanionCallback: ({
|
||||
Value<int> id = const Value.absent(),
|
||||
required String email,
|
||||
required String displayName,
|
||||
required String name,
|
||||
}) =>
|
||||
UsersCompanion.insert(
|
||||
id: id,
|
||||
email: email,
|
||||
displayName: displayName,
|
||||
name: name,
|
||||
),
|
||||
withReferenceMapper: (p0) => p0
|
||||
.map((e) => (e.readTable(table), BaseReferences(db, table, e)))
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
CREATE TABLE IF NOT EXISTS users(
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
email TEXT NOT NULL,
|
||||
display_name TEXT NOT NULL
|
||||
name TEXT NOT NULL
|
||||
);
|
||||
@@ -13,7 +13,7 @@ import 'package:phylum/util/logging.dart';
|
||||
const _persistKeyAccessToken = 'accessToken';
|
||||
const _persistKeyUserId = 'userId';
|
||||
const _persistKeyUserEmail = 'userEmail';
|
||||
const _persistKeyUserDisplayName = 'userDisplayName';
|
||||
const _persistKeyUserName = 'userName';
|
||||
const _persistKeyUserHome = 'userHome';
|
||||
const _persistKeyUserPermissions = 'userPermissions';
|
||||
|
||||
@@ -65,9 +65,9 @@ class PhylumAccount extends Account<PhylumAccount> {
|
||||
persist(_persistKeyUserEmail, value);
|
||||
}
|
||||
|
||||
String get userDisplayName => getPersisted(_persistKeyUserDisplayName);
|
||||
set userDisplayName(String value) {
|
||||
persist(_persistKeyUserDisplayName, value);
|
||||
String get userName => getPersisted(_persistKeyUserName);
|
||||
set userName(String value) {
|
||||
persist(_persistKeyUserName, value);
|
||||
}
|
||||
|
||||
String get userHome => getPersisted(_persistKeyUserHome);
|
||||
@@ -132,7 +132,7 @@ class PhylumAccount extends Account<PhylumAccount> {
|
||||
|
||||
final userMap = response['user'];
|
||||
account.userEmail = userMap['email'];
|
||||
account.userDisplayName = userMap['display_name'];
|
||||
account.userName = userMap['name'];
|
||||
account.userId = userMap['id'];
|
||||
account.userHome = userMap['home'];
|
||||
account.userPermissions = userMap['permissions'];
|
||||
|
||||
@@ -8,6 +8,7 @@ import 'package:phylum/libphylum/db/db.dart';
|
||||
import 'package:phylum/libphylum/phylum_account.dart';
|
||||
import 'package:phylum/libphylum/requests/users_list_request.dart';
|
||||
import 'package:phylum/libphylum/responses/responses.dart';
|
||||
import 'package:phylum/util/user_display_name.dart';
|
||||
|
||||
const _remoteUsersBoxName = 'remote_users';
|
||||
const _keyLocalUserId = 'local_user_id';
|
||||
@@ -49,16 +50,14 @@ class UserRepository extends Repository<PhylumAccount, User> {
|
||||
}
|
||||
|
||||
String getUserDisplayName(int userId) {
|
||||
final user = _users[userId];
|
||||
if (user == null) return 'Unknown User($userId)';
|
||||
return user.displayName.isNotEmpty ? user.displayName : user.email;
|
||||
return _users[userId]?.displayName ?? 'Unknown User($userId)';
|
||||
}
|
||||
|
||||
Future<User> invite(String email, String name) async {
|
||||
final localId = _account.getPersisted<num>(_keyLocalUserId)?.toInt() ?? -1;
|
||||
await _account.persist(_keyLocalUserId, localId - 1);
|
||||
final user = User(id: localId, email: email, displayName: name);
|
||||
await _account.addAction(UserInviteAction(localId: localId, email: email, displayName: name));
|
||||
final user = User(id: localId, email: email, name: name);
|
||||
await _account.addAction(UserInviteAction(localId: localId, email: email, userName: name));
|
||||
return user;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ class UserListResponse extends PhylumApiSuccessResponse {
|
||||
final users = (data["users"] as List).cast<Map>().map((u) => User(
|
||||
id: u['id'],
|
||||
email: u['email'],
|
||||
displayName: u['display_name'],
|
||||
name: u['name'],
|
||||
));
|
||||
return UserListResponse(users: users);
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ class UserResponse extends PhylumApiSuccessResponse {
|
||||
final user = User(
|
||||
id: data['id'],
|
||||
email: data['email'],
|
||||
displayName: data['display_name'],
|
||||
name: data['name'],
|
||||
);
|
||||
return UserResponse(user: user);
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import 'package:phylum/libphylum/db/resource_helpers.dart';
|
||||
import 'package:phylum/libphylum/phylum_account.dart';
|
||||
import 'package:phylum/util/dialogs.dart';
|
||||
import 'package:phylum/util/permissions.dart';
|
||||
import 'package:phylum/util/user_display_name.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ResourcePermissionsView extends StatefulWidget {
|
||||
@@ -121,16 +122,14 @@ class _ResourcePermissionsViewState extends State<ResourcePermissionsView> {
|
||||
final allUsers = await (account.db.users.select()..where((u) => u.id.isNotIn(grants!.keys))).get();
|
||||
final users = allUsers.toList(growable: false)
|
||||
..sort((a, b) {
|
||||
final aName = (a.displayName.isNotEmpty ? a.displayName : a.email);
|
||||
final bName = b.displayName.isNotEmpty ? b.displayName : b.email;
|
||||
// TODO: not the most efficient
|
||||
return aName.toLowerCase().compareTo(bName.toLowerCase());
|
||||
return a.displayName.toLowerCase().compareTo(b.displayName.toLowerCase());
|
||||
});
|
||||
if (!context.mounted) return;
|
||||
final user = await showOptionsDialogBuilder(
|
||||
context,
|
||||
users,
|
||||
(user) => ListTile(title: Text(user.displayName.isNotEmpty ? user.displayName : user.email)),
|
||||
(user) => ListTile(title: Text(user.displayName)),
|
||||
buildLastItem: (_) => ListTile(
|
||||
leading: Icon(Icons.person_add),
|
||||
title: Text('Invite'),
|
||||
@@ -141,7 +140,7 @@ class _ResourcePermissionsViewState extends State<ResourcePermissionsView> {
|
||||
}),
|
||||
filterList: (u, q) {
|
||||
final query = q.toLowerCase();
|
||||
return u.where((u) => u.email.contains(query) || u.displayName.contains(query)).toList(growable: false);
|
||||
return u.where((u) => u.email.contains(query) || u.name.contains(query)).toList(growable: false);
|
||||
},
|
||||
);
|
||||
if (user == null || !context.mounted) return;
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
import 'package:phylum/libphylum/db/db.dart';
|
||||
|
||||
extension UserDisplayName on User {
|
||||
String get displayName => name.isEmpty ? email : name;
|
||||
}
|
||||
Reference in New Issue
Block a user