本文整理匯總了TypeScript中@nteract/selectors.currentHost函數的典型用法代碼示例。如果您正苦於以下問題:TypeScript currentHost函數的具體用法?TypeScript currentHost怎麽用?TypeScript currentHost使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了currentHost函數的5個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。
示例1: switchMap
switchMap(action => {
if (!action.payload || typeof action.payload.filepath !== "string") {
return of({
type: "ERROR",
error: true,
payload: { error: new Error("updating content needs a payload") }
}) as any;
}
const state: any = state$.value;
const host: any = selectors.currentHost(state);
// Dismiss any usage that isn't targeting a jupyter server
if (host.type !== "jupyter") {
return empty();
}
const { contentRef, filepath, prevFilePath } = action.payload;
const serverConfig: ServerConfig = selectors.serverConfig(host);
return contents
.update(serverConfig, prevFilePath, { path: filepath.slice(1) })
.pipe(
tap(xhr => {
if (xhr.status !== 200) {
throw new Error(xhr.response);
}
}),
map(() => {
/*
* Modifying the url's file name in the browser.
* This effects back button behavior.
* Is there a better way to accomplish this?
*/
window.history.replaceState(
{},
filepath,
urljoin(host.basePath, `/nteract/edit${filepath}`)
);
return actions.changeContentNameFulfilled({
contentRef: action.payload.contentRef,
filepath: action.payload.filepath,
prevFilePath
});
}),
catchError((xhrError: any) =>
of(
actions.changeContentNameFailed({
basepath: host.basepath,
filepath: action.payload.filepath,
prevFilePath,
error: xhrError,
contentRef: action.payload.contentRef
})
)
)
);
})
示例2: concatMap
concatMap((action: actions.KillKernelAction) => {
const state = state$.value;
const host = selectors.currentHost(state);
if (host.type !== "jupyter") {
// Dismiss any usage that isn't targeting a jupyter server
return empty();
}
const serverConfig: ServerConfig = selectors.serverConfig(host);
const kernel = selectors.currentKernel(state);
if (!kernel) {
return of(
actions.killKernelFailed({
error: new Error("kernel not available for killing"),
kernelRef: action.payload.kernelRef
})
);
}
if (kernel.type !== "websocket" || !kernel.id || !kernel.sessionId) {
return of(
actions.killKernelFailed({
error: new Error(
"websocket kernel epic can only kill websocket kernels with an id"
),
kernelRef: action.payload.kernelRef
})
);
}
// TODO: If this was a kernel language change, we shouldn't be using this
// kill kernel epic because we need to make sure that creation happens
// after deletion
return sessions.destroy(serverConfig, kernel.sessionId).pipe(
map(() =>
actions.killKernelSuccessful({
kernelRef: action.payload.kernelRef
})
),
catchError(err =>
of(
actions.killKernelFailed({
error: err,
kernelRef: action.payload.kernelRef
})
)
)
);
})
示例3: mergeMap
mergeMap((action: actions.FetchKernelspecs) => {
const {
payload: { hostRef, kernelspecsRef }
} = action;
const state = state$.value;
const host = selectors.currentHost(state);
if (host.type !== "jupyter") {
// Dismiss any usage that isn't targeting a jupyter server
return empty();
}
const serverConfig: ServerConfig = selectors.serverConfig(host);
return kernelspecs.list(serverConfig).pipe(
map(data => {
const defaultKernelName = data.response.default;
const kernelspecs: { [key: string]: KernelspecProps } = {};
Object.keys(data.response.kernelspecs).forEach(key => {
const value = data.response.kernelspecs[key];
kernelspecs[key] = {
name: value.name,
resources: value.resources,
argv: value.spec.argv,
displayName: value.spec.display_name,
env: value.spec.env,
interruptMode: value.spec.interrupt_mode,
language: value.spec.language,
metadata: value.spec.metadata
};
});
return actions.fetchKernelspecsFulfilled({
hostRef,
kernelspecsRef,
defaultKernelName,
kernelspecs
});
}),
catchError(error => {
return of(actions.fetchKernelspecsFailed({ kernelspecsRef, error }));
})
);
})
示例4: empty
(
action: actions.Save | actions.DownloadContent
):
| Observable<
| actions.DownloadContentFailed
| actions.DownloadContentFulfilled
| actions.SaveFailed
| actions.SaveFulfilled
>
| Observable<never> => {
const state = state$.value;
const host = selectors.currentHost(state);
if (host.type !== "jupyter") {
// Dismiss any usage that isn't targeting a jupyter server
return empty();
}
const contentRef = action.payload.contentRef;
const content = selectors.content(state, { contentRef });
// NOTE: This could save by having selectors for each model type
// have toDisk() selectors
// It will need to be cased off when we have more than one type
// of content we actually save
if (!content) {
const errorPayload = {
error: new Error("Content was not set."),
contentRef: action.payload.contentRef
};
if (action.type === actions.DOWNLOAD_CONTENT) {
return of(actions.downloadContentFailed(errorPayload));
}
return of(actions.saveFailed(errorPayload));
}
if (content.type === "directory") {
// Don't save directories
return empty();
}
let filepath = content.filepath;
// This could be object for notebook, or string for files
let serializedData: Notebook | string;
let saveModel: Partial<contents.Payload> = {};
if (content.type === "notebook") {
const appVersion = selectors.appVersion(state);
// contents API takes notebook as raw JSON whereas downloading takes
// a string
serializedData = toJS(
content.model.notebook.setIn(
["metadata", "nteract", "version"],
appVersion
)
);
saveModel = {
content: serializedData,
type: content.type
};
} else if (content.type === "file") {
serializedData = content.model.text;
saveModel = {
content: serializedData,
type: content.type,
format: "text"
};
} else {
// We shouldn't save directories
return empty();
}
switch (action.type) {
case actions.DOWNLOAD_CONTENT: {
// FIXME: Convert this to downloadString, so it works for both files & notebooks
if (
content.type === "notebook" &&
typeof serializedData === "object"
) {
downloadString(
stringifyNotebook(serializedData),
filepath || "notebook.ipynb",
"application/json"
);
} else if (
content.type === "file" &&
typeof serializedData === "string"
) {
downloadString(
serializedData,
filepath,
content.mimetype || "application/octet-stream"
);
} else {
// This shouldn't happen, is here for safety
return empty();
}
return of(
actions.downloadContentFulfilled({
contentRef: action.payload.contentRef
//.........這裏部分代碼省略.........
示例5: switchMap
switchMap((action: actions.LaunchKernelByNameAction) => {
const state = state$.value;
const host = selectors.currentHost(state);
if (host.type !== "jupyter") {
// Dismiss any usage that isn't targeting a jupyter server
return empty();
}
const serverConfig: ServerConfig = selectors.serverConfig(host);
const {
payload: { kernelSpecName, cwd, kernelRef, contentRef }
} = action;
const content = selectors.content(state, { contentRef });
if (!content || content.type !== "notebook") {
return empty();
}
// TODO: Create a START_SESSION action instead (?)
const sessionPayload = {
kernel: {
id: null,
name: kernelSpecName
},
name: "",
// TODO: Figure where the leading slash comes from in the content store
path: content.filepath.replace(/^\/+/g, ""),
type: "notebook"
};
// TODO: Handle failure cases here
return sessions.create(serverConfig, sessionPayload).pipe(
mergeMap(data => {
const session = data.response;
const sessionId = castToSessionId(session.id);
const kernel: RemoteKernelProps = Object.assign({}, session.kernel, {
type: "websocket",
info: null,
sessionId,
cwd,
channels: kernels.connect(
serverConfig,
session.kernel.id,
sessionId
),
kernelSpecName
});
kernel.channels.next(kernelInfoRequest());
return of(
actions.launchKernelSuccessful({
kernel,
kernelRef,
contentRef: action.payload.contentRef,
selectNextKernel: true
})
);
}),
catchError(error => {
return of(actions.launchKernelFailed({ error }));
})
);
})