feat(admin): allow create group through admin

pull/105/merge
moonrailgun 2 years ago
parent f824e10ec3
commit 58f7144c31

File diff suppressed because it is too large Load Diff

@ -29,7 +29,7 @@
"react": "^18.2.0",
"react-dom": "^18.2.0",
"tailchat-server-sdk": "workspace:^",
"tushan": "^0.3.2",
"tushan": "^0.3.4",
"vite-express": "0.8.0"
},
"devDependencies": {

@ -116,9 +116,9 @@ export const groupFields = [
createTextField('name'),
createReferenceField('owner', {
reference: 'users',
displayField: 'nickname',
displayField: (record) => `${record.nickname}#${record.discriminator}`,
list: {
width: 80,
width: 160,
},
}),
createTextField('members.length', {
@ -131,8 +131,16 @@ export const groupFields = [
hidden: true,
},
}),
createJSONField('roles'),
createJSONField('fallbackPermissions'),
createJSONField('roles', {
edit: {
hidden: true,
},
}),
createJSONField('fallbackPermissions', {
edit: {
hidden: true,
},
}),
createDateTimeField('createdAt', {
format: 'iso',
edit: {

@ -30,6 +30,7 @@ export const GroupList: React.FC = React.memo(() => {
edit: true,
delete: true,
export: true,
create: true,
custom: (record) => [
{
key: 'addGroupMember',
@ -89,7 +90,8 @@ export const UserSelector: React.FC<{ onChange: (val: Identifier) => void }> =
value={userId}
onChange={handleChange}
options={{
displayField: 'nickname',
displayField: (record) =>
`${record.nickname}#${record.discriminator}`,
reference: 'users',
}}
/>

@ -1,5 +1,6 @@
import type { ADPBaseModel } from './baseModel.interface';
import castFilter from './castFilter';
import { isValidObjectId } from 'mongoose';
interface parseQueryParam {
q?: string;
@ -24,6 +25,10 @@ export default function parseQuery<
if (result.q) {
if (!Array.isArray(result.$or)) result.$or = [];
fields.forEach((field) => {
if (field === '_id' && !isValidObjectId(result.q)) {
// Skip _id search in invalid objectid
return;
}
const newFilter = { [field]: result.q };
result.$or.push(castFilter(newFilter, model, allowedRegexes));
});

@ -245,11 +245,28 @@ router.use(
allowedRegexFields: ['content'],
})
);
router.post('/groups/', auth(), async (req, res) => {
// create group
const { name, owner } = req.body;
const group = await groupModel.createGroup({
name,
owner,
});
res.json({
id: group._id,
});
});
router.use(
'/groups',
auth(),
raExpressMongoose(groupModel, {
q: ['_id', 'name'],
capabilities: {
create: false,
},
})
);
router.use(

Loading…
Cancel
Save