Skip to content

Commit

Permalink
feat(ui): add option to add picture link for groups (#9882)
Browse files Browse the repository at this point in the history
Co-authored-by: gaurav2733 <[email protected]>
  • Loading branch information
akarsh991 and gaurav2733 authored Mar 5, 2024
1 parent dde9687 commit a85db60
Show file tree
Hide file tree
Showing 10 changed files with 60 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.datahub.authorization.DisjunctivePrivilegeGroup;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.linkedin.common.url.Url;
import com.linkedin.common.urn.Urn;
import com.linkedin.common.urn.UrnUtils;
import com.linkedin.data.template.RecordTemplate;
Expand Down Expand Up @@ -231,6 +232,9 @@ private RecordTemplate mapCorpGroupEditableInfo(
if (input.getEmail() != null) {
result.setEmail(input.getEmail());
}
if (input.getPictureLink() != null) {
result.setPictureLink(new Url(input.getPictureLink()));
}
return result;
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package com.linkedin.datahub.graphql.types.corpgroup.mappers;

import com.linkedin.data.template.GetMode;
import com.linkedin.data.template.RecordTemplate;
import com.linkedin.datahub.graphql.generated.CorpGroupEditableProperties;
import com.linkedin.datahub.graphql.types.mappers.ModelMapper;
import javax.annotation.Nonnull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Maps Pegasus {@link RecordTemplate} objects to objects conforming to the GQL schema.
Expand All @@ -14,6 +17,9 @@ public class CorpGroupEditablePropertiesMapper
implements ModelMapper<
com.linkedin.identity.CorpGroupEditableInfo, CorpGroupEditableProperties> {

private final Logger _logger =
LoggerFactory.getLogger(CorpGroupEditablePropertiesMapper.class.getName());

public static final CorpGroupEditablePropertiesMapper INSTANCE =
new CorpGroupEditablePropertiesMapper();

Expand All @@ -29,6 +35,13 @@ public CorpGroupEditableProperties apply(
result.setDescription(corpGroupEditableInfo.getDescription(GetMode.DEFAULT));
result.setSlack(corpGroupEditableInfo.getSlack(GetMode.DEFAULT));
result.setEmail(corpGroupEditableInfo.getEmail(GetMode.DEFAULT));
com.linkedin.common.url.Url pictureLinkObject =
corpGroupEditableInfo.getPictureLink(GetMode.NULL);
String pictureLink = null;
if (pictureLinkObject != null) {
pictureLink = pictureLinkObject.toString();
}
result.setPictureLink(pictureLink);
return result;
}
}
10 changes: 10 additions & 0 deletions datahub-graphql-core/src/main/resources/entity.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -4077,6 +4077,11 @@ type CorpGroupEditableProperties {
Email address for the group
"""
email: String

"""
A URL which points to a picture which user wants to set as a profile photo
"""
pictureLink: String
}

"""
Expand All @@ -4097,6 +4102,11 @@ input CorpGroupUpdateInput {
Email address for the group
"""
email: String

"""
A URL which points to a picture which user wants to set as a profile photo
"""
pictureLink: String
}

"""
Expand Down
17 changes: 17 additions & 0 deletions datahub-web-react/src/app/entity/group/GroupEditModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ type PropsData = {
email: string | undefined;
slack: string | undefined;
urn: string | undefined;
photoUrl: string | undefined;
};

type Props = {
Expand All @@ -27,6 +28,7 @@ export default function GroupEditModal({ visible, onClose, onSave, editModalData
slack: editModalData.slack,
email: editModalData.email,
urn: editModalData.urn,
photoUrl: editModalData.photoUrl,
});

useEffect(() => {
Expand All @@ -41,6 +43,7 @@ export default function GroupEditModal({ visible, onClose, onSave, editModalData
input: {
email: data.email,
slack: data.slack,
pictureLink: data.photoUrl,
},
},
})
Expand All @@ -55,6 +58,7 @@ export default function GroupEditModal({ visible, onClose, onSave, editModalData
email: '',
slack: '',
urn: '',
photoUrl: '',
});
})
.catch((e) => {
Expand Down Expand Up @@ -125,6 +129,19 @@ export default function GroupEditModal({ visible, onClose, onSave, editModalData
onChange={(event) => setData({ ...data, slack: event.target.value })}
/>
</Form.Item>

<Form.Item
name="photoUrl"
label={<Typography.Text strong>Image URL</Typography.Text>}
rules={[{ whitespace: true }, { type: 'url', message: 'not valid url' }]}
hasFeedback
>
<Input
placeholder="https://www.example.com/photo.png"
value={data.photoUrl}
onChange={(event) => setData({ ...data, photoUrl: event.target.value })}
/>
</Form.Item>
</Form>
</Modal>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ export default function GroupInfoSidebar({ sideBarData, refetch }: Props) {
urn,
email,
slack,
photoUrl
};

// About Text save
Expand Down
2 changes: 1 addition & 1 deletion datahub-web-react/src/app/entity/group/GroupProfile.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ export default function GroupProfile() {

// Side bar data
const sideBarData = {
photoUrl: undefined,
photoUrl: data?.corpGroup?.editableProperties?.pictureLink || undefined,
avatarName:
data?.corpGroup?.properties?.displayName ||
data?.corpGroup?.name ||
Expand Down
2 changes: 1 addition & 1 deletion datahub-web-react/src/app/identity/group/GroupListItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ export default function GroupListItem({ group, onDelete, selectRoleOptions, refe
<GroupItemContainer>
<Link to={`${entityRegistry.getEntityUrl(EntityType.CorpGroup, group.urn)}`}>
<GroupHeaderContainer>
<CustomAvatar size={32} name={displayName} />
<CustomAvatar size={32} name={displayName} photoUrl={group?.editableProperties?.pictureLink || undefined}/>
<div style={{ marginLeft: 16, marginRight: 16 }}>
<div>
<Typography.Text>{displayName}</Typography.Text>
Expand Down
3 changes: 3 additions & 0 deletions datahub-web-react/src/app/identity/group/cacheUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ const createFullGroup = (baseGroup) => {
},
memberCount: null,
roles: null,
editableProperties: {
pictureLink: null,
},
};
};

Expand Down
4 changes: 4 additions & 0 deletions datahub-web-react/src/graphql/group.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ query getGroup($urn: String!, $membersCount: Int!) {
description
slack
email
pictureLink
}
properties {
displayName
Expand Down Expand Up @@ -201,6 +202,9 @@ query listGroups($input: ListGroupsInput!) {
description
email
}
editableProperties {
pictureLink
}
memberCount: relationships(
input: { types: ["IsMemberOfGroup", "IsMemberOfNativeGroup"], direction: INCOMING, start: 0, count: 1 }
) {
Expand Down
13 changes: 6 additions & 7 deletions smoke-test/tests/cypress/cypress/e2e/settings/managing_groups.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ describe("create and manage group", () => {
});

it("update group info", () => {
var expected_name = Cypress.env('ADMIN_USERNAME');
cy.loginWithCredentials();
cy.visit("/settings/identities/groups");
cy.clickOptionWithText(group_name);
Expand All @@ -79,14 +78,14 @@ describe("create and manage group", () => {
cy.waitTextVisible("Changes saved.");
cy.contains("Test group description EDITED").should("be.visible");
cy.clickOptionWithText("Add Owners");
cy.contains("Search for users or groups...").click({ force: true });
cy.focused().type(expected_name);
cy.get(".ant-select-item-option").contains(expected_name, { matchCase: false }).click();
cy.get('[id="owner"]').click({ force: true });
cy.focused().type(username);
cy.get(".ant-select-item-option").contains(username, { matchCase: false }).click();
cy.focused().blur();
cy.contains(expected_name, { matchCase: false }).should("have.length", 1);
cy.contains(username, { matchCase: false }).should("have.length", 1);
cy.get('[role="dialog"] button').contains("Done").click();
cy.waitTextVisible("Owners Added");
cy.contains(expected_name, { matchCase: false }).should("be.visible");
cy.contains(username, { matchCase: false }).should("be.visible");
cy.clickOptionWithText("Edit Group");
cy.waitTextVisible("Edit Profile");
cy.get("#email").type(`${test_id}@testemail.com`);
Expand All @@ -97,7 +96,7 @@ describe("create and manage group", () => {
cy.waitTextVisible(`#${test_id}`);
});

it("test user verify group participation", () => {
it("test User verify group participation", () => {
cy.loginWithCredentials();
cy.visit("/settings/identities/groups");
cy.hideOnboardingTour();
Expand Down

0 comments on commit a85db60

Please sign in to comment.