Skip to content

Commit

Permalink
Merge pull request #5374 from Sage-Bionetworks/develop
Browse files Browse the repository at this point in the history
Merge develop into release-498
  • Loading branch information
xschildw authored Apr 27, 2024
2 parents 490c0e0 + 9681c51 commit 3f176eb
Show file tree
Hide file tree
Showing 20 changed files with 555 additions and 245 deletions.
27 changes: 2 additions & 25 deletions .github/workflows/build-test-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
retention-days: 1
playwright-tests:
needs: [build]
runs-on: 'macos-latest'
runs-on: 'macos-12'
timeout-minutes: 60
# Ensure that at most one playwright-tests job will run at a time in Sage-Bionetworks repo,
# but allow multiple playwright-test jobs to run concurrently in forked repos
Expand Down Expand Up @@ -70,29 +70,6 @@ jobs:
- name: Check colima and lima version
if: runner.os == 'macos'
run: |
echo "- runner colima version: $(colima version)" >> $GITHUB_STEP_SUMMARY
LIMA_VERSION=$(limactl --version)
echo "- runner lima version: ${LIMA_VERSION}" >> $GITHUB_STEP_SUMMARY
if [[ !("${LIMA_VERSION}" == "limactl version 0.19.0" || "${LIMA_VERSION}" == "limactl version 0.19.1") ]]; then
echo "::warning::runner lima version has changed. Consider removing lima/colima downgrade, see SWC-6655."
fi
- name: Downgrade colima/lima versions
if: runner.os == 'macos'
run: |
brew uninstall colima
brew uninstall lima
# install lima
LIMA_VERSION="v0.18.0"
LIMA_VERSION_URL="https://github.com/lima-vm/lima/releases/download/${LIMA_VERSION}/lima-${LIMA_VERSION:1}-$(uname -s)-$(uname -m).tar.gz"
curl -fsSL "${LIMA_VERSION_URL}" | tar Cxzvm /usr/local
# install colima
COLIMA_VERSION="v0.6.6"
COLIMA_VERSION_URL="https://github.com/abiosoft/colima/releases/download/${COLIMA_VERSION}/colima-$(uname -s)-$(uname -m)"
sudo mkdir -p /usr/local/bin
sudo curl -L -o /usr/local/bin/colima "${COLIMA_VERSION_URL}" && sudo chmod +x /usr/local/bin/colima
# Get colima and lima versions
limactl --version
colima version
Expand All @@ -119,7 +96,7 @@ jobs:
with:
node-version: ${{ env.NODE_VERSION }}
- name: Install dependencies
run: yarn install --frozen-lockfile
run: yarn install --frozen-lockfile --network-timeout 1000000
- name: Install Playwright Browsers
run: yarn playwright install --with-deps
- name: Check for common errors
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"croppie": "2.6.5",
"font-awesome": "4.7.0",
"jquery": "3.5.1",
"katex": "^0.16.10",
"jsplumb": "2.13.2",
"moment": "^2.29.4",
"papaparse": "^5.4.1",
Expand All @@ -19,7 +20,7 @@
"react-transition-group": "2.6.0",
"sass": "^1.63.6",
"spark-md5": "^3.0.2",
"synapse-react-client": "3.2.8",
"synapse-react-client": "3.2.12",
"universal-cookie": "^4.0.4",
"xss": "^1.0.15"
},
Expand Down
8 changes: 8 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,14 @@
file="${project.basedir}/node_modules/xss/dist/xss.min.js"
tofile="src/main/webapp/generated/xss.min.js"
/>
<copy
file="${project.basedir}/node_modules/katex/dist/katex.min.js"
tofile="src/main/webapp/generated/katex.min.js"
/>
<copy
file="${project.basedir}/node_modules/katex/dist/katex.css"
tofile="src/main/webapp/generated/katex.css"
/>
</target>
</configuration>
</execution>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,6 @@ public class ClientProperties {
/*
* JavaScript WebResources
*/
public static final WebResource MATH_PROCESSOR_JS = new WebResource(
"js/katex-0.10.1.min.js"
);
public static final WebResource AWS_SDK_JS = new WebResource(
"js/aws-sdk-2.494.0.min.js"
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@
import org.sagebionetworks.web.client.widget.accessrequirements.TeamSubjectWidget;
import org.sagebionetworks.web.client.widget.accessrequirements.TermsOfUseAccessRequirementWidget;
import org.sagebionetworks.web.client.widget.accessrequirements.approval.AccessorGroupWidget;
import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.CreateAccessRequirementWizard;
import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.CreateOrUpdateAccessRequirementWizard;
import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.LegacyCreateAccessRequirementWizard;
import org.sagebionetworks.web.client.widget.accessrequirements.submission.ACTDataAccessSubmissionWidget;
import org.sagebionetworks.web.client.widget.accessrequirements.submission.OpenSubmissionWidget;
import org.sagebionetworks.web.client.widget.asynch.AsynchronousProgressWidget;
Expand Down Expand Up @@ -734,7 +735,9 @@ public interface PortalGinInjector extends Ginjector {

FileHandleWidget getFileHandleWidget();

CreateAccessRequirementWizard getCreateAccessRequirementWizard();
LegacyCreateAccessRequirementWizard getLegacyCreateAccessRequirementWizard();

CreateOrUpdateAccessRequirementWizard getCreateOrUpdateAccessRequirementWizard();

ProfileCertifiedValidatedWidget getProfileCertifiedValidatedWidget();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package org.sagebionetworks.web.client.jsinterop;

import jsinterop.annotations.JsFunction;
import jsinterop.annotations.JsNullable;
import jsinterop.annotations.JsOverlay;
import jsinterop.annotations.JsPackage;
import jsinterop.annotations.JsType;
import org.sagebionetworks.repo.model.RestrictableObjectDescriptor;

@JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "Object")
public class CreateOrUpdateAccessRequirementWizardProps
extends ReactComponentProps {

@FunctionalInterface
@JsFunction
public interface OnComplete {
void onComplete();
}

@FunctionalInterface
@JsFunction
public interface OnCancel {
void onCancel();
}

boolean open;

@JsNullable
RestrictableObjectDescriptorJsObject subject;

@JsNullable
String accessRequirementId;

@JsNullable
OnComplete onComplete;

@JsNullable
OnCancel onCancel;

@JsOverlay
public static CreateOrUpdateAccessRequirementWizardProps create(
boolean open,
RestrictableObjectDescriptor subject,
String accessRequirementId,
OnComplete onComplete,
OnCancel onCancel
) {
CreateOrUpdateAccessRequirementWizardProps props =
new CreateOrUpdateAccessRequirementWizardProps();
props.open = open;
if (subject != null) {
props.subject = RestrictableObjectDescriptorJsObject.create(subject);
}
props.accessRequirementId = accessRequirementId;
props.onComplete = onComplete;
props.onCancel = onCancel;
return props;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.sagebionetworks.web.client.jsinterop;

import jsinterop.annotations.JsOverlay;
import jsinterop.annotations.JsPackage;
import jsinterop.annotations.JsType;
import org.sagebionetworks.repo.model.RestrictableObjectDescriptor;

@JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "Object")
public class RestrictableObjectDescriptorJsObject extends ReactComponentProps {

String id;
String type;

@JsOverlay
public static RestrictableObjectDescriptorJsObject create(
RestrictableObjectDescriptor rod
) {
RestrictableObjectDescriptorJsObject props =
new RestrictableObjectDescriptorJsObject();
props.id = rod.getId();
props.type = rod.getType().toString();
return props;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,9 @@ public static class SynapseComponents {
public static ReactComponentType<
AccessRequirementAclEditorProps
> AccessRequirementAclEditor;
public static ReactComponentType<
CreateOrUpdateAccessRequirementWizardProps
> CreateOrUpdateAccessRequirementWizard;

/**
* Pushes a global toast message. In SWC, you should use {@link DisplayUtils#notify}, rather than calling this method directly.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.sagebionetworks.web.client.widget.accessrequirements;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
Expand All @@ -10,21 +8,28 @@
import org.gwtbootstrap3.client.ui.constants.IconType;
import org.sagebionetworks.repo.model.AccessRequirement;
import org.sagebionetworks.repo.model.RestrictableObjectDescriptor;
import org.sagebionetworks.web.client.DisplayUtils;
import org.sagebionetworks.web.client.PortalGinInjector;
import org.sagebionetworks.web.client.cookie.CookieProvider;
import org.sagebionetworks.web.client.jsinterop.CreateOrUpdateAccessRequirementWizardProps;
import org.sagebionetworks.web.client.utils.Callback;
import org.sagebionetworks.web.client.utils.CallbackP;
import org.sagebionetworks.web.client.widget.Button;
import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.CreateAccessRequirementWizard;
import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.CreateOrUpdateAccessRequirementWizard;
import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.LegacyCreateAccessRequirementWizard;
import org.sagebionetworks.web.client.widget.asynch.IsACTMemberAsyncHandler;
import org.sagebionetworks.web.client.widget.entity.renderer.SingleButtonView;
import org.sagebionetworks.web.client.widget.table.modal.wizard.ModalWizardWidget.WizardCallback;

public class CreateAccessRequirementButton implements IsWidget {
public class CreateAccessRequirementButton
implements SingleButtonView.Presenter, IsWidget {

private SingleButtonView view;
private CookieProvider cookies;

public static final String CREATE_NEW_ACCESS_REQUIREMENT_BUTTON_TEXT =
"Create New Access Requirement";
public static final String EDIT_ACCESS_REQUIREMENT_BUTTON_TEXT =
"Edit Access Requirement";
public Button button;
public IsACTMemberAsyncHandler isACTMemberAsyncHandler;
public PortalGinInjector ginInjector;
RestrictableObjectDescriptor subject;
Expand All @@ -33,49 +38,25 @@ public class CreateAccessRequirementButton implements IsWidget {

@Inject
public CreateAccessRequirementButton(
Button button,
SingleButtonView view,
IsACTMemberAsyncHandler isACTMemberAsyncHandler,
CookieProvider cookies,
final PortalGinInjector ginInjector
) {
this.button = button;
this.view = view;
this.isACTMemberAsyncHandler = isACTMemberAsyncHandler;
this.ginInjector = ginInjector;
button.setVisible(false);
button.addStyleName("margin-left-10");
button.addClickHandler(
new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
CreateAccessRequirementWizard wizard =
ginInjector.getCreateAccessRequirementWizard();
if (subject != null) {
wizard.configure(subject);
} else if (ar != null) {
wizard.configure(ar);
}
wizard.showModal(
new WizardCallback() {
@Override
public void onFinished() {
refreshCallback.invoke();
}

@Override
public void onCanceled() {
refreshCallback.invoke();
}
}
);
}
}
);
this.cookies = cookies;
view.setButtonVisible(false);
view.addStyleNames("margin-left-10");
view.setPresenter(this);
}

public void configure(AccessRequirement ar, Callback refreshCallback) {
button.setText(EDIT_ACCESS_REQUIREMENT_BUTTON_TEXT);
button.setSize(ButtonSize.DEFAULT);
button.setType(ButtonType.DEFAULT);
button.setIcon(IconType.EDIT);
view.setButtonText(EDIT_ACCESS_REQUIREMENT_BUTTON_TEXT);
view.setButtonSize(ButtonSize.DEFAULT);
view.setButtonType(ButtonType.DEFAULT);
view.setButtonIcon(IconType.EDIT);
this.refreshCallback = refreshCallback;
this.subject = null;
this.ar = ar;
Expand All @@ -86,10 +67,10 @@ public void configure(
RestrictableObjectDescriptor subject,
Callback refreshCallback
) {
button.setText(CREATE_NEW_ACCESS_REQUIREMENT_BUTTON_TEXT);
button.setSize(ButtonSize.LARGE);
button.setType(ButtonType.PRIMARY);
button.setIcon(IconType.PLUS);
view.setButtonText(CREATE_NEW_ACCESS_REQUIREMENT_BUTTON_TEXT);
view.setButtonSize(ButtonSize.LARGE);
view.setButtonType(ButtonType.PRIMARY);
view.setButtonIcon(IconType.PLUS);
this.refreshCallback = refreshCallback;
this.subject = subject;
this.ar = null;
Expand All @@ -101,13 +82,72 @@ private void showIfACTMember() {
new CallbackP<Boolean>() {
@Override
public void invoke(Boolean isACTMember) {
button.setVisible(isACTMember);
view.setButtonVisible(isACTMember);
}
}
);
}

@Override
public void onClick() {
if (DisplayUtils.isInTestWebsite(cookies)) {
useSrcWizard();
} else {
useSwcWizard();
}
}

private void useSwcWizard() {
LegacyCreateAccessRequirementWizard wizard =
ginInjector.getLegacyCreateAccessRequirementWizard();
if (subject != null) {
wizard.configure(subject);
} else if (ar != null) {
wizard.configure(ar);
}
wizard.showModal(
new WizardCallback() {
@Override
public void onFinished() {
refreshCallback.invoke();
view.clearWidgets();
}

@Override
public void onCanceled() {
refreshCallback.invoke();
view.clearWidgets();
}
}
);
}

private void useSrcWizard() {
CreateOrUpdateAccessRequirementWizard wizard =
ginInjector.getCreateOrUpdateAccessRequirementWizard();

CreateOrUpdateAccessRequirementWizardProps.OnComplete onComplete = () -> {
wizard.setOpen(false);
refreshCallback.invoke();
view.clearWidgets();
};
CreateOrUpdateAccessRequirementWizardProps.OnCancel onCancel = () -> {
wizard.setOpen(false);
refreshCallback.invoke();
view.clearWidgets();
};

if (subject != null) {
wizard.configure(subject, onComplete, onCancel);
} else if (ar != null) {
wizard.configure(ar, onComplete, onCancel);
}
wizard.setOpen(true);
view.addWidget(wizard.asWidget());
}

@Override
public Widget asWidget() {
return button.asWidget();
return view.asWidget();
}
}
Loading

0 comments on commit 3f176eb

Please sign in to comment.