Skip to content

Commit

Permalink
Setup new portal instance for templar (#983)
Browse files Browse the repository at this point in the history
* fix solution action

* fix preview for proposals

* setup new portal instance for templar

* add indexer

* changes as per indexer

* fix filter

* fix search filter

* rename `app` to `portal`

* hide about

* added templar t&c

* updated terms and condition

* fix issues with snapshot history

* skip announcement related tests

* skip sunset tests
  • Loading branch information
Megha-Dev-19 authored Dec 10, 2024
1 parent 28a44ab commit e864121
Show file tree
Hide file tree
Showing 64 changed files with 12,105 additions and 31 deletions.
1 change: 1 addition & 0 deletions instances/devhub.near/widget/config/data.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ const categoryOptions = [
];

return {
portalName: "Devhub",
contract: "devhub.near",
proposalFeedIndexerQueryName:
"polyprogrammist_near_devhub_prod_v1_proposals_with_latest_snapshot",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ State.init({

const instance = props.instance ?? "";

const { cacheUrl } = VM.require(`${instance}/widget/config.data`);
const { cacheUrl, portalName } = VM.require(`${instance}/widget/config.data`);

const fetchAndSetProposalSnapshot = () => {
if (!props.proposalId) {
Expand Down Expand Up @@ -81,6 +81,6 @@ return (
target="_blank"
rel="noopener noreferrer"
>
DevHub’s Terms and Conditions
{portalName}'s Terms and Conditions
</a>
);
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ const { getLinkUsingCurrentGateway } = VM.require(
const snapshotHistory = props.snapshotHistory;
const proposalId = props.id;
const instanceAccount = props.item.path.split("/")[0];
const acceptedTermsComponent = props.acceptedTermsComponent ?? (
<Widget
src={"${REPL_DEVHUB}/widget/devhub.entity.proposal.AcceptedTerms"}
props={{ proposalId: proposalId, instance: instanceAccount }}
/>
);

const Wrapper = styled.div`
position: relative;
Expand Down Expand Up @@ -95,6 +101,7 @@ function sortTimelineAndComments() {
.map((item, index) => {
const startingPoint = snapshotHistory[index]; // Set comparison to the previous item
// we don't show timeline_version in logs
delete startingPoint.block_height;
delete startingPoint.timeline.timeline_version;
delete item.timeline.timeline_version;
if (
Expand Down Expand Up @@ -332,10 +339,7 @@ const parseProposalKeyAndValue = (key, modifiedValue, originalValue) => {
return (
<span>
accepted
<Widget
src={"${REPL_DEVHUB}/widget/devhub.entity.proposal.AcceptedTerms"}
props={{ ...props, proposalId: proposalId }}
/>
{acceptedTermsComponent}
</span>
);
}
Expand Down
1 change: 1 addition & 0 deletions instances/events-committee.near/widget/config/data.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ const categoryOptions = [
];

return {
portalName: "Events Committee",
contract: "events-committee.near",
proposalFeedIndexerQueryName:
"thomasguntenaar_near_event_committee_prod_v1_proposals_with_latest_snapshot",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -861,8 +861,7 @@ return (
...props,
id: proposal.id,
item: item,
snapshotHistory: snapshotHistory,
latestSnapshot: snapshot,
snapshotHistory: [...proposal.snapshot_history, snapshot],
}}
/>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,12 @@ State.init({
function sortTimelineAndComments() {
const comments = Social.index("comment", props.item, { subscribe: true });

if (state.changedKeysListWithValues === null) {
if (state.changedKeysListWithValues === null && snapshotHistory.length > 0) {
const changedKeysListWithValues = snapshotHistory
.slice(1)
.map((item, index) => {
const startingPoint = snapshotHistory[index]; // Set comparison to the previous item
delete startingPoint.block_height;
return {
editorId: item.editor_id,
...getDifferentKeysWithValues(startingPoint, item),
Expand Down Expand Up @@ -135,9 +136,11 @@ function sortTimelineAndComments() {
});
}

if (Array.isArray(snapshotHistory)) {
sortTimelineAndComments();
}
useEffect(() => {
if (Array.isArray(snapshotHistory)) {
sortTimelineAndComments();
}
}, [snapshotHistory]);

const Comment = ({ commentItem }) => {
const { accountId, blockHeight } = commentItem;
Expand Down Expand Up @@ -288,7 +291,10 @@ function parseTimelineKeyAndValue(timeline, originalValue, modifiedValue) {

const AccountProfile = ({ accountId }) => {
return (
<span className="inline-flex fw-bold text-black">
<span
className="inline-flex fw-bold text-black"
style={{ verticalAlign: "top" }}
>
<Widget
src={`${REPL_DEVHUB}/widget/devhub.entity.proposal.Profile`}
props={{
Expand Down Expand Up @@ -326,6 +332,13 @@ const LinkToProposal = ({ id, children }) => {
);
};

function formatDate(nanoseconds) {
const milliseconds = nanoseconds / 1_000_000; // Convert nanoseconds to milliseconds
const date = new Date(milliseconds);

return date.toISOString().split("T")[0];
}

const parseProposalKeyAndValue = (key, modifiedValue, originalValue) => {
switch (key) {
case "name":
Expand All @@ -335,6 +348,13 @@ const parseProposalKeyAndValue = (key, modifiedValue, originalValue) => {
return <span>changed {key}</span>;
case "labels":
return <span>changed labels to {(modifiedValue ?? []).join(", ")}</span>;
case "submission_deadline":
return (
<span>
changed submission deadline to {formatDate(modifiedValue)} to{" "}
{formatDate(originalValue)}{" "}
</span>
);
case "linked_proposals": {
const newProposals = modifiedValue || [];
const oldProposals = originalValue || [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ const fetchSnapshotHistory = () => {
delete rfpData.ts;
return rfpData;
});
setSnapshotHistory(history);
setSnapshotHistory([...history].reverse());
});
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ const categoryOptions = [
];

return {
portalName: "Infrastructure Committee",
contract: "infrastructure-committee.near",
proposalFeedIndexerQueryName:
"polyprogrammist_near_devhub_ic_v1_proposals_with_latest_snapshot",
Expand Down
2 changes: 2 additions & 0 deletions instances/treasury-templar.near/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
build
dist
10 changes: 10 additions & 0 deletions instances/treasury-templar.near/aliases.mainnet.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"REPL_DEVHUB": "devhub.near",
"REPL_TREASURY_TEMPLAR": "treasury-templar.near",
"REPL_TREASURY_TEMPLAR_CONTRACT": "treasury-templar.near",
"REPL_TREASURY_BASE_DEPLOYMENT_ACCOUNT": "treasury-templar.near",
"REPL_NEAR": "near",
"REPL_RPC_URL": "https://rpc.mainnet.near.org",
"REPL_RFP_IMAGE": "https://ipfs.near.social/ipfs/bafkreicbygt4kajytlxij24jj6tkg2ppc2dw3dlqhkermkjjfgdfnlizzy",
"REPL_CACHE_URL": "https://templar-cache-api-rs.fly.dev"
}
6 changes: 6 additions & 0 deletions instances/treasury-templar.near/bos.config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"account": "treasury-templar.near",
"aliasPrefix": "REPL",
"aliasesContainsPrefix": true,
"aliases": ["./aliases.mainnet.json"]
}
3 changes: 3 additions & 0 deletions instances/treasury-templar.near/data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"treasury-templar.near": {}
}
1 change: 1 addition & 0 deletions instances/treasury-templar.near/src
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
const { Tile } = VM.require(
`${REPL_DEVHUB}/widget/devhub.components.molecule.Tile`
) || { Tile: () => <></> };

const item = {
path: `${REPL_TREASURY_TEMPLAR_CONTRACT}/profile/**`,
};

const profile = Social.get(item.path);

if (!profile.description) {
<div
style={{ height: "50vh" }}
className="d-flex justify-content-center align-items-center w-100"
>
<Widget src={`${REPL_DEVHUB}/widget/devhub.components.molecule.Spinner`} />
</div>;
}

const initialData = profile.description;
const [content, setContent] = useState(null);
const [showCommentToast, setCommentToast] = useState(false);
const [handler, setHandler] = useState(null);
const [isTxnCreated, setTxnCreated] = useState(false);

const Container = styled.div`
width: 100%;
margin: 0 auto;
padding: 20px;
text-align: left;
`;

const hasDataChanged = () => {
return content !== initialData;
};

const handlePublish = () => {
setTxnCreated(true);
Near.call([
{
contractName: "${REPL_TREASURY_TEMPLAR_CONTRACT}",
methodName: "set_social_db_profile_description",
args: { description: content },
gas: 270000000000000,
},
]);
};

useEffect(() => {
if (isTxnCreated) {
const checkForAboutInSocialDB = () => {
Near.asyncView(REPL_SOCIAL_CONTRACT, "get", {
keys: [item.path],
}).then((result) => {
try {
const submittedAboutText = content;
const lastAboutTextFromSocialDB =
result["${REPL_TREASURY_TEMPLAR_CONTRACT}"].profile.description;
if (submittedAboutText === lastAboutTextFromSocialDB) {
setTxnCreated(false);
setCommentToast(true);
return;
}
} catch (e) {}
setTimeout(() => checkForAboutInSocialDB(), 2000);
});
};
checkForAboutInSocialDB();
}
}, [isTxnCreated]);

useEffect(() => {
if (!content && initialData) {
setContent(initialData);
setHandler("update");
}
}, [initialData]);

function Preview() {
return (
<Tile className="p-3" style={{ background: "white", minHeight: "500px" }}>
<Widget
src={`${REPL_DEVHUB}/widget/devhub.components.molecule.SimpleMDEViewer`}
props={{
content: content,
height: "500px",
}}
/>
</Tile>
);
}

return (
<Container>
<Widget
src={`${REPL_NEAR}/widget/DIG.Toast`}
props={{
title: "About page updated successfully",
type: "success",
open: showCommentToast,
onOpenChange: (v) => setCommentToast(v),
trigger: <></>,
providerProps: { duration: 3000 },
}}
/>
<ul className="nav nav-tabs" id="editPreviewTabs" role="tablist">
<li className="nav-item" role="presentation">
<button
className="nav-link active"
id="edit-tab"
data-bs-toggle="tab"
data-bs-target="#edit"
type="button"
role="tab"
aria-controls="edit"
aria-selected="true"
>
Edit
</button>
</li>
<li className="nav-item" role="presentation">
<button
className="nav-link"
id="preview-tab"
data-bs-toggle="tab"
data-bs-target="#preview"
type="button"
role="tab"
aria-controls="preview"
aria-selected="false"
>
Preview
</button>
</li>
</ul>
<div className="tab-content" id="editPreviewTabsContent">
<div
className="tab-pane show active py-4"
id="edit"
role="tabpanel"
aria-labelledby="edit-tab"
>
<Widget
src={`${REPL_TREASURY_TEMPLAR}/widget/components.molecule.SimpleMDE`}
props={{
data: { handler: handler, content: content },
onChangeKeyup: (v) => {
setContent(v);
},
showAutoComplete: true,
}}
/>

<div
className={"d-flex align-items-center justify-content-end gap-3 mt-4"}
>
<Widget
src={`${REPL_DEVHUB}/widget/devhub.components.molecule.Button`}
props={{
classNames: { root: "btn-success" },
disabled: !hasDataChanged(),
icon: {
type: "bootstrap_icon",
variant: "bi-check-circle-fill",
},
label: "Publish",
onClick: handlePublish,
}}
/>
</div>
</div>
<div
className="tab-pane"
id="preview"
role="tabpanel"
aria-labelledby="preview-tab"
style={{ position: "relative" }}
>
<div className="w-100 h-100 py-4">
<Preview />
</div>
</div>
</div>
</Container>
);
Loading

0 comments on commit e864121

Please sign in to comment.