lbry-desktop/ui/redux/actions/publish.js
infiinte-persistence 48787a1feb doPublishDesktop: Call the "preview" modal before doing the actual publish.
This requires an accompanying change in lbry-redux. Search for "SETTINGS.ENABLE_PUBLISH_PREVIEW" in the commit message to find the commit.

In Edit Mode, the preview will not appear. Not sure if it's needed, plus there are more things to handle in Edit mode (e.g. which items are changed)
2020-10-02 10:25:17 -04:00

98 lines
2.8 KiB
JavaScript

// @flow
import * as MODALS from 'constants/modal_types';
import * as ACTIONS from 'constants/action_types';
import * as PAGES from 'constants/pages';
import {
batchActions,
selectMyClaims,
doPublish,
doCheckPendingClaims,
doCheckReflectingFiles,
ACTIONS as LBRY_REDUX_ACTIONS,
} from 'lbry-redux';
import { doError } from 'redux/actions/notifications';
import { push } from 'connected-react-router';
import analytics from 'analytics';
import { doOpenModal } from './app';
export const doPublishDesktop = (filePath: string, preview?: boolean) => (dispatch: Dispatch, getState: () => {}) => {
const publishPreview = previewResponse => {
dispatch(
doOpenModal(MODALS.PUBLISH_PREVIEW, {
previewResponse,
})
);
};
const publishSuccess = (successResponse, lbryFirstError) => {
const state = getState();
const myClaims = selectMyClaims(state);
const pendingClaim = successResponse.outputs[0];
analytics.apiLogPublish(pendingClaim);
const { permanent_url: url } = pendingClaim;
const actions = [];
// @if TARGET='app'
actions.push(push(`/$/${PAGES.UPLOADS}`));
// @endif
actions.push({
type: ACTIONS.PUBLISH_SUCCESS,
});
// We have to fake a temp claim until the new pending one is returned by claim_list_mine
// We can't rely on claim_list_mine because there might be some delay before the new claims are returned
// Doing this allows us to show the pending claim immediately, it will get overwritten by the real one
const isMatch = claim => claim.claim_id === pendingClaim.claim_id;
const isEdit = myClaims.some(isMatch);
actions.push({
type: LBRY_REDUX_ACTIONS.UPDATE_PENDING_CLAIMS,
data: {
claims: [pendingClaim],
},
});
// @if TARGET='app'
actions.push({
type: LBRY_REDUX_ACTIONS.ADD_FILES_REFLECTING,
data: pendingClaim,
});
// @endif
dispatch(batchActions(...actions));
dispatch(
doOpenModal(MODALS.PUBLISH, {
uri: url,
isEdit,
filePath,
lbryFirstError,
})
);
dispatch(doCheckPendingClaims());
// @if TARGET='app'
dispatch(doCheckReflectingFiles());
// @endif
};
const publishFail = error => {
const actions = [];
actions.push({
type: ACTIONS.PUBLISH_FAIL,
});
actions.push(doError(error.message));
dispatch(batchActions(...actions));
};
if (preview) {
dispatch(doPublish(publishSuccess, publishFail, publishPreview));
return;
}
// Redirect on web immediately because we have a file upload progress componenet
// on the publishes page. This doesn't exist on desktop so wait until we get a response
// from the SDK
// @if TARGET='web'
dispatch(push(`/$/${PAGES.UPLOADS}`));
// @endif
dispatch(doPublish(publishSuccess, publishFail));
};